我写了一个小应用程序,应该显示一个转速计,通过蓝牙获取有关rpm ...的数据。当数据发生变化时,我会旋转一个针和一些其他的imageViews来显示屏幕上的当前值。
旋转代码:
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 =)
答案 0 :(得分:3)
你可以做两件事:
首先,每次需要更新copy()
时都不要致电Bitmap
这会创建一个新的Bitmap
并且耗费时间和内存。
其次,在invalidate()
上致电ImageView
。这将通知View已更改某些内容并重新绘制,而无需更新完全替换Bitmap时发生的任何其他内容。
最后,您甚至可能想要创建自己的View实现,这样您就可以覆盖onDraw()
并在那里执行旋转。