自定义Android视图中的硬件加速部分失效

Mat*_*ate 10 android

我的应用程序中有一个自定义视图,可以填充整个活动.

在大多数情况下,当我想刷新控件时,我调用时invalidate()没有任何参数.

但是,在某些情况下,我只是改变控件的一小块区域,我打电话invalidate(Rect)来避免重新绘制整个屏幕.这很重要,因为在这些情况下,我需要尽可能快地进行更新.

这似乎工作正常,但是,当我在Honeycomb中启用硬件加速(即android:hardwareAccelerated="true"在AndroidManifest.xml中设置 )时,部分重绘似乎不起作用.

如果我Log.d("FOO", canvas.getClipBounds())用我的onDraw()方法做的话可以看出来; 输出只显示整个控件正在更新,而禁用硬件加速,我得到正确的输出区域.

使用硬件加速时有没有办法使部分失效工作?

非常感谢,马特

Rom*_*Guy 15

部分重绘工作正常,只有屏幕的指定区域才会被重绘.然而,它不会改变画布上的剪辑边界.将记录所有绘制操作,但实际上只会执行与脏区域相交的绘制操作.

更新:从Lollipop(API 21)开始,部分失效发生在视图级别(即,您不能使整个视图无效).

  • 根据我的硬件加速经验,整个视图总是重绘.我已经通过将我的视图拆分为较小视图的网格并且仅使更改的视图无效来验证这一点.在这种情况下,性能得到了很大改善 (2认同)