5

我在 onDraw 函数中调用 getDrawingCache。问题是它仅在第一次包含对画布的更改,之后,它根本不会随着新的更改而更新。这是我的代码:

        paintAction.draw(canvas);
        if (paintAction.isPermanentChange())
        {
            Bitmap partialBitmap=getDrawingCache();
            int numColored=0;
            for (int index1=0;index1<partialBitmap.getWidth();index1++)
            {
                for (int index2=0;index2<partialBitmap.getHeight();index2++)
                {
                    if (partialBitmap.getPixel(index1,index2)==0xFF000000) 
                        numColored++;
                }
            }
            Log.i("PaintDroid","Bitmap pixels: " + numColored);
            int areaWidth=partialBitmap.getWidth()-SCROLLBAR_SIZE;
            int areaHeight=partialBitmap.getHeight()-SCROLLBAR_SIZE;
            int[] pixels=new int[areaWidth*areaHeight];
            partialBitmap.getPixels(pixels,0,areaWidth,0,0,areaWidth,
                    areaHeight);    
            numColored=0;
            for (int index=0;index<pixels.length;index++)
                if (pixels[index]==0xFF000000) numColored++;
            Log.i("PaintDroid","Pixels: " + numColored);

(setDrawingCache(true) 在创建视图时调用,因为如果我从 onDraw 调用它,getDrawingCache 将返回 null。)

可以看出,我通过遍历位图和获取数组中的值来计算黑色像素的数量,正如我所说,我第一次得到了我期望的数字,但在那之后,它本来应该增加的,但根本没有改变!

有人知道出了什么问题吗?谢谢。

4

2 回答 2

5

我解决了。问题是我在 onDraw 画布上的最后一次绘制操作之前调用了 setDrawingCacheEnabled(true)。它必须在绘制完成后调用,否则将无法得到正确的结果。

于 2012-06-16T10:41:55.920 回答
0

澄清一下,这里的问题是视图的绘图缓存在您第二次调用getDrawingCache().

为了刷新绘图缓存,它必须失效并且调用方法的顺序应该如下:

public Bitmap renderView(View view) {
    view.setDrawingCacheEnabled(true)
    Bitmap bitmap = view.getDrawingCache();
    view.setDrawingCacheEnabled(false)
    return bitmap;
}
于 2014-08-21T08:20:35.747 回答