3

我写了一个小应用程序,它应该显示一个转速计,它可以通过蓝牙获取有关 rpm 的数据。当数据发生变化时,我旋转针和其他一些图像视图以在屏幕上显示当前值。

旋转代码:

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,或者我可以更改以使其更快地工作?

谢谢=)

4

1 回答 1

3

您可以做两件事:
首先,不要在copy()每次需要更新时调用,Bitmap这会创建一个新的Bitmap并且既耗时又消耗内存。
二是invalidate()呼吁ImageView。这将通知视图发生了某些变化,并且当您完全替换位图时,它无需更新正在发生的任何其他事情,它会重新绘制自己。

最后,您甚至可能想要创建自己的 View 实现,以便您可以在onDraw()那里覆盖并执行旋转。

于 2012-04-26T07:28:57.027 回答