我想在 Android 中设计一个仪表视图,例如带有旋转指针的圆形温度计。
为了效率/速度,当新数据到达时,我只想重新绘制视图中发生变化的部分(例如旋转针)。
我最初的测试类扩展了 View,每次新数据到达时,我都必须在 onDraw() 中重新绘制整个视图(移动和非移动元素)。
我找到了一个示例(http://mindtherobot.com/blog/272/android-custom-ui-making-a-vintage-thermometer/),它建议将非移动组件绘制到位图上。此位图是使用 canvas.drawBitmap 在 onDraw() 中绘制的。通过这种方式,您只需要在视图的非移动部分发生更改(例如调整视图大小)时绘制单独的非移动图形元素(重新生成位图)。
我的优化想法是不同的。我认为也许我的仪表应该扩展 ViewGroup 而不是 View。然后在 ViewGroup 中,我可以为仪表的非移动和移动部分创建单独的视图。我会绘制一次非移动视图,并且永远不会强制它无效()。然后我会将移动的指针绘制为一个单独的视图(在 ViewGroup 中对齐,使其覆盖非移动视图),当新数据到达时我可以 invalidate() ,所以它会被重新绘制。我是否错过了一些使这成为一种不好的方法的东西?
例如,我的假设是不正确的,即不需要重新绘制非移动背景视图(即调用其 onDraw),因为同一 ViewGroup 中的覆盖旋转针视图已更改?或者,由于视图重叠,针视图更改是否会强制同一视图组中的背景视图也重新绘制?
非常感谢。