imageView.setImageBitmap(Bitmap)极慢地减慢了我的应用程序

时间:2012-04-26 07:23:18

标签: android user-interface bitmap imageview android-canvas

我写了一个小应用程序,应该显示一个转速计,通过蓝牙获取有关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 =)

1 个答案:

答案 0 :(得分:3)

你可以做两件事:
首先,每次需要更新copy()时都不要致电Bitmap这会创建一个新的Bitmap并且耗费时间和内存。
其次,在invalidate()上致电ImageView。这将通知View已更改某些内容并重新绘制,而无需更新完全替换Bitmap时发生的任何其他内容。

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