我在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。)
可以看出,我正在计算黑色像素的数量,通过遍历位图并获取数组中的值,正如我所说,我得到的是我第一次预期的数字,但之后它应该增加,但根本不会改变!
有人知道出了什么问题吗? 感谢。
答案 0 :(得分:4)
我解决了。问题是我在onDraw上画布上的最后一个绘制操作之前调用了setDrawingCacheEnabled(true)。完成绘图后必须调用它,否则将无法获得正确的结果。
答案 1 :(得分:-1)
为了澄清一下,这里的问题是在第二次调用getDrawingCache()
之前,View的绘图缓存没有失效。
为了刷新绘图缓存,必须使其无效,调用方法的顺序如下:
public Bitmap renderView(View view) {
view.setDrawingCacheEnabled(true)
Bitmap bitmap = view.getDrawingCache();
view.setDrawingCacheEnabled(false)
return bitmap;
}