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

android-imageView.setImageBitmap(Bitmap)极大地减慢了我的应用程序,第1张

概述我编写了一个小应用程序,该应用程序应显示一个转速表,该转速表通过蓝牙获取有关rpm的数据.当数据更改时,我旋转针头和其他一些imageViews以在屏幕上显示当前值.旋转代码:bMapRpm=bMapcanvasBackTacho.copy(bMapcanvasBackTacho.getConfig(),true);canvasRpm.setBitmap(bMapRpm)

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

解决方法:

您可以做两件事:
首先,不要在每次需要更新位图时都调用copy(),这会创建一个新的位图,并且会浪费时间和内存.
其次,在ImageVIEw上调用invalIDate().这将通知VIEw某些更改,并且重新绘制自身,而不必完全替换位图时更新其他任何事情.

最后,您甚至可能想要创建自己的VIEw实现,以便可以重写onDraw()并在那里进行旋转.

总结

以上是内存溢出为你收集整理的android-imageView.setImageBitmap(Bitmap)极大地减慢了我的应用程序全部内容,希望文章能够帮你解决android-imageView.setImageBitmap(Bitmap)极大地减慢了我的应用程序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1074028.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存