我有一个应用程序可以与arduino通信。有自定义形状的按钮,因此我将它们以PNG绘制为单个背景,并添加Buttons
了android:background="@android:color/transparent"
使它们在几乎自定义按钮大小的顶部透明的按钮。
在此图像中,您可以看到:1.背景-黑色背景,深蓝色按钮绘制为单个png。2.橙色png-与背景大小相同,并带有match parrent
选项进行绘制。3.隐形按钮-具有透明选项,蓝色正方形,共有7个。
为了消除指示图像的错位,我在PNG透明背景中绘制了相同大小的背景。我加入他们res/drawable
,并在布局XML作为ImageView
同android:visibility="gone"
,布局FrameLayout
。为了表明该按钮已被按下,我将设置VISIBLE
橙色的自定义按钮,当arduino打开输出时,会发送回确认信息,使我消失并设置另一个PNG可见。它消耗大量内存。图像尺寸为1478x2623。在最坏的情况下,我必须一次只显示8张图像+永久背景。在onCreate方法中,我加载了所有17张图像。
为了避免OOM-内存不足错误,我必须调整图像大小,这使我看起来很糟糕...
如果图像在XML中的可见性为android:visibility="gone"
,是否将图像加载到onCreate中?如果是这样,我应该创建,缩放它,并仅在需要时绘制。如何实现呢?
编辑
进行了一些更改。
这些更改使它变得更快,并且不再出现OOM错误。目前我很忙,因此需要一些时间来测试答案中建议的方法。我会尽快尝试。
为什么您的图片这么大?该分辨率(1478x2623)很大,将8保留在内存中确实会导致OOM异常。
如果确实需要,则可以执行以下任一操作:
要回答您的确切问题:如果XML中图像的可见性是android:visibility =“ gone”,是否将图像加载到onCreate中?如果是这样,我应该创建,缩放它,并仅在需要时绘制。如何实现呢?
是的,它仍然会加载图像,因为它需要立即显示它,并且是的,只有在需要时才应解码位图。有关如何实现的信息,请参见上面的第2点和第3点。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句