0

我的 Android 应用程序中有一个活动,如下图所示:

我的屏幕

传奇:

  • 灰色:覆盖整个屏幕的背景图像;
  • 蓝色:5个不同大小的圆圈;
  • 绿色:任意图像;

我正在使用视图动画(http://developer.android.com/guide/topics/graphics/view-animation.html)对圆圈进行动画处理,以便一次只显示一个。

但是我在一些我曾经测试过的设备和模拟器中遇到了 OutOfMemory 异常。

我将布局更改为使用 3 个 ImageView,一个带有 3 个内圈的一张图像,另一个带有 1 个外圈的图像,每个都使用相同的图像文件但大小不同,我正在为它们设置动画,启用和禁用它们的可见性属性. 因此,我只使用 2 张图片而不是 5 张。

使用这种方法,我停止了 OutOfMemory 异常,我猜是因为我加载和显示的图像比以前少。

仅供参考,我在文件夹中放置了不同的图像尺寸:

  • 可绘制的 hdpi
  • 可绘制的 ldpi
  • 可绘制的 mdpi
  • 可绘制的 xhdpi

内存有那么大吗?有没有人有更好的解决方案来建议我可以继续使用我的 5 圈图像?

该应用程序很小,因此没有必要走上使用 OpenGL 的道路。

谢谢!

4

2 回答 2

0

如果它真的只是圆圈,则不需要实际的位图图像,但可以使用 aShapeDrawable代替。这将为圆形图像节省所有内存(并在所有分辨率下产生完美的圆形)。

另一个 SO 项目的简单示例:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" >
    <gradient android:startColor="#FFFF0000" android:endColor="#80FF00FF"
        android:angle="270"/>
</shape>
于 2013-08-28T14:22:55.303 回答
0

是的,Android 系统只保证一个应用程序有 16MB 的内存,但制造商可以允许更多(通常他们会这样做)。但他们不限于这样做,所以如果你超过这个限制,你可以OutOfMemoryException在很多内存不足的设备上使用。

于 2013-08-28T14:04:06.600 回答