我写了一个只显示一个自定义视图的活动。
视图很简单,绘制随机颜色并使较小的区域无效,并绘制随机颜色并使更小的区域无效,等等......
预期的结果应该是这样的。它通过使用软件渲染效果很好,getClipBounds() 返回我刚刚传递给无效的区域。但是当启用硬件加速时,整个视图总是用新的颜色重绘,并且 getClipBounds() 返回整个视图的区域。
我知道有一些这样的帖子和这个。答案说 getClipBounds() 通过硬件加速返回整个视图的区域,但只有与脏区域相交的区域才会被重绘。
有什么不对或我的误解吗?
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
// random color
int color = Color.rgb((int) (Math.random() * 255),
(int) (Math.random() * 255), (int) (Math.random() * 255));
canvas.drawColor(color);
canvas.getClipBounds(rect);
// smaller dirty region
invalidate(0, 0, rect.width() - 1, rect.height() - 1);
}