我正在创建一个Android应用程序,它本质上是一个仪表板,上面有许多仪表和指示器。我有一个Main View,它添加在Main Activity的onCreate()方法中。每个仪表都是一个自定义View对象,它在主视图中添加和初始化,并在主视图的onDraw()方法中绘制。仪表值由主活动的onCreate()方法中启动的各个线程不断更新。当线程检测到需要更改仪表值时,它会这样做,然后向主视图发送消息(通过消息处理程序),告诉它需要更新特定仪表(重新绘制)。我在主视图的消息处理程序中使用invalidate()来刷新屏幕。该应用程序运行良好,但我想知道我是否正在尽可能有效地处理显示更新。我的问题是:
当我在主视图中调用invalidate()时,我假设它正在重绘所有规范视图,即使是那些没有改变的视图。如果是这样,重新绘制已更改的仪表视图会更有效吗?最好的方法是什么?我试过调用单独的View的invalidate()和postInvalidate()方法,但都不起作用。
根据要求,这是主视图中onDraw方法的当前状态。最终会增加更多的仪表。挡板是静态的,只有在设备切换配置(横向/纵向)时才会改变。各种仪表都是从Gauge类中实例化的,它扩展了View:
@Override
protected void onDraw(Canvas canvas) {
speedoBezel.draw(canvas);
tachBezel.draw(canvas);
oilPressBezel.draw(canvas);
oilTempBezel.draw(canvas);
speedoGauge.draw(canvas);
tachGauge.draw(canvas);
oilPressGauge.draw(canvas);
oilTempGauge.draw(canvas);
}
好的,我已经阅读了很多在Android中制作动画的方法我开始混淆它们。我想重新解释一下这个问题:
如果我在主视图中开发一个具有许多不同对象的应用程序,这些应用程序经常以不同的间隔进行更改,那么性能是否更好:
将对象添加到主视图并使用主视图中的invalidate(rect)根据需要单独更新它们,或
将每个对象添加到布局中,并在需要更新时在每个视图上使用invalidate。
重要的是要注意,没有任何对象重叠