我已经写了一个小应用程序,应该显示一个转速计,得到它的转速数据…通过蓝牙。当数据改变时,我旋转一个指针和其他一些图像视图,在屏幕上显示当前值。
旋转代码:
bMapRpm=bMapcanvasBackTacho.copy(bMapcanvasBackTacho.getConfig(), true);
canvasRpm.setBitmap(bMapRpm);
canvasRpm.save();
canvasRpm.rotate((float)Rpmdegree+(float)Rpmcurrentdegree,bMapRpm.getWidth()/2,bMapRpm.getHeight()/2);
canvasRpm.drawBitmap(bMapNadel,0,0,paint);
canvasRpm.restore();
bmapcanvasbacktacho只是一个透明的背景。
bmapnadel是指针的位图。
bmaprpm是要绘制的画布位图
要始终更新ImageView,请调用:
ivNadel.setImageBitmap(bMapRpm);
我试图通过注释部分代码来降低应用程序的速度。
在注释了setImageBitmap()之后,将禁用“减速”。
是否有人知道如何用其他方式更新imageview,或者我可以更改什么以使其更快地工作?
THX=)
最佳答案
你可以做两件事:
首先,不要在每次需要更新copy()
时都调用Bitmap
,这会创建一个新的Bitmap
,并且会耗费时间和内存。
其次,在invalidate()
上调用ImageView
。这将通知视图某些内容已更改,它将重新绘制自身,而不必更新完全替换位图时发生的任何其他情况。
最后,您甚至可能想要创建自己的视图实现,这样您就可以覆盖onDraw()
并在那里执行旋转。