【发布时间】:2011-08-29 17:53:55
【问题描述】:
我的应用程序中有一个自定义视图,它填充了整个活动。
在大多数情况下,当我想刷新控件时,我会调用invalidate(),不带任何参数。
但是,在某些情况下,如果我只更改控件的一小部分区域,我会调用 invalidate(Rect) 以避免重绘整个屏幕。这很重要,因为在这些情况下,我
需要尽快更新。
这似乎工作正常,但是,当我在 Honeycomb 中启用硬件加速(即在 AndroidManifest.xml 中设置android:hardwareAccelerated="true")时,部分重绘似乎不起作用。
如果我在我的onDraw() 方法中执行Log.d("FOO", canvas.getClipBounds()),就可以看到这一点;输出只是显示整个控件正在更新,而在禁用硬件加速的情况下,我得到了正确的输出区域。
在使用硬件加速时,有什么方法可以使部分失效工作?
非常感谢,马特
【问题讨论】:
-
我也一直在想这个问题,并且遇到了与您描述的相同的结果。您对在使用硬件加速时尝试使部分失效起作用有任何更新吗?或者关于为什么这不起作用的任何更新?
-
部分更新有效。显示列表必须包含视图的所有绘制命令,但只有与脏区相交的命令才会真正执行。
标签: android