Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android setImageBitmap(位图)极大地降低了我的应用程序的速度_Android_User Interface_Bitmap_Imageview_Android Canvas - Fatal编程技术网

Android setImageBitmap(位图)极大地降低了我的应用程序的速度

Android setImageBitmap(位图)极大地降低了我的应用程序的速度,android,user-interface,bitmap,imageview,android-canvas,Android,User Interface,Bitmap,Imageview,Android Canvas,我已经写了一个小应用程序,应该显示一个测速仪,获得它的转速数据。。。通过蓝牙。当数据发生变化时,我旋转指针和其他一些图像视图,以在屏幕上显示当前值 旋转代码: bMapRpm=bMapcanvasBackTacho.copy(bMapcanvasBackTacho.getConfig(), true); canvasRpm.setBitmap(bMapRpm); canvasRpm.save(); canvasRpm.rotate((float)Rpmdegree+(float)Rpmcurre

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

旋转代码:

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()
,这会创建一个新的
位图
,而且会消耗时间和内存。
其次,在
ImageView
上调用
invalidate()。这将通知视图某些内容已更改,并且在完全替换位图时,视图无需更新任何其他内容即可重新绘制自身


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

我试图使位图无效,而不是设置新位图,但它仍然很慢,现在ImageView不显示任何内容=(我在onCreate方法中为ImageView设置了一次位图。您是否删除了
copy()
?否则,您仍将绘制到新位图,而不是
图像视图中的原始位图。嗯,我将尝试实现我自己的视图。希望这会有帮助。没有删除副本。问题是位图具有透明区域。因此,在重新绘制之前,我必须以某种方式清除它。我还尝试了canv之类的方法asBoost.drawColor(0,PorterDuff.Mode.CLEAR)或bMapBoost.eraseColor(0);但我会遇到其他问题,比如在绘制时出现错误(某些区域未绘制…)。好的,即使绘制和擦除时不会出现错误,但速度仍然很慢