我的应用程序中有一个自定义视图,它填充了整个活动。
在大多数情况下,当我想刷新控件时我调用invalidate()
没有任何参数。
但是,在某些情况下,我只更改控件的一小部分区域,我会调用invalidate(Rect)
以避免重绘整个屏幕。这很重要,因为在这些情况下我
需要更新尽可能快。
然而,当我在 Honeycomb 中启用硬件加速(即设置android:hardwareAccelerated="true"
在 AndroidManifest.xml 中),部分重绘似乎不起作用。
如果我这样做就可以看到Log.d("FOO", canvas.getClipBounds())
in my onDraw()
方法;输出只是显示整个控件正在更新,而在禁用硬件加速的情况下,我得到了输出的正确区域。
使用硬件加速时有什么方法可以使部分失效起作用吗?
非常感谢,马特
部分重绘效果很好,只有屏幕的指定区域才会重绘。但它不会改变画布上的剪辑边界。所有的绘制操作都会被记录,但只有与脏区域相交的操作才会被实际执行。
更新:从 Lollipop (API 21) 开始,部分失效发生在视图级别(即,您不能使少于整个视图的失效)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)