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