Android unit test中經過顏色比對替代肉眼檢查

對於Android UI類的單元測試,之前寫的有些代碼就是sleep 10秒,而後肉眼檢查下。這樣子在自動化測試中沒有用。canvas

今天修改了下代碼,其實肉眼檢查也就是檢查pixel的顏色,因此能夠直接獲取view的某個點的顏色,而後跟指望值比較就好了。單元測試

這是獲取view中某個pixel顏色的代碼:測試

    public static int getColor(View view, int x, int y) {
        int w = view.getWidth();
        int h = view.getHeight();
        if (x >= 0 && x < w && y >= 0 && y < h) {
            Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(bmp);
            view.draw(canvas);
            return bmp.getPixel(x, y);
        }
        return 0;
    }

若是隻須要顏色相近,而不徹底相同,能夠計算兩個顏色的四元素(RGBA)之間的距離,能夠用這個方法:spa

    public static int getColorDistance(int color1, int color2) {
        return (int) Math.sqrt(
                (Math.pow(Color.red(color1) - Color.red(color2), 2)
                + Math.pow(Color.green(color1) - Color.green(color2), 2)
                + Math.pow(Color.blue(color1) - Color.blue(color2), 2)
                + Math.pow(Color.alpha(color1) - Color.alpha(color2), 2)));
    }
相關文章
相關標籤/搜索