我有一个应用程序,允许用户从一组预定义的控件构建复杂的屏幕布局。然后这些控件相互通信以生成最终功能。我看到的问题是,无论我做什么,似乎由一个控件的更改引起的任何重绘都会强制整个屏幕重绘(如启用“显示屏幕更改”所示)。因为我有很多自定义控件而后面没有太多的XML,所以这种重绘可能会很慢。
例如,一个控件可能是一个由几个线性布局构建的计算器。另一个可能是从线性布局动态生成的命令网格构建。然后在加载屏幕时将其中的每一个添加到父相对布局中。按下计算器上的某个键会强制命令网格重绘,即使其任何视图中没有任何更改。
我尝试打开硬件加速并将所有视图的图层类型更改为LAYER_TYPE_HARDWARE而没有运气。
如何确保仅重绘屏幕的特定子部分?在这一点上,我没有做任何让自己失效的调用,但我有自己的按钮,布局和其他UI组件的可用版本,所以如果我需要达到这个级别的控制,至少已经有一个框架适合它。
答案 0 :(得分:0)
这看起来非常像这个.. Moving Android View and preventing onDraw to be called over and over again
但是如果你只是想绘制一个部分,请尝试调用invalidate(rect)
,其中rect是Rect
,你定义了一个将被“重绘”的区域,而不是那个你不能重写的区域。