我有一个 135 帧的帧动画,每秒应该交换 25 次。帧为 700X1000 像素,240 dpi。我遇到的问题是,每当我在 XML 动画文件中定义超过 5 帧时,应用程序就会崩溃。框架位于可绘制文件夹中。我尝试将它们复制到 drawable-xhdpi 但这并没有解决问题。
谢谢,西蒙
该错误清楚地表明您正在尝试使用更多内存。这直接指向图像大小。因此,您需要调整图像大小以使用更少的内存。出于这个原因可以使用的一个是BitmapFactory.Option。或者手动调整图像大小,注意它是否适合您的所有需求。
堆大小是分配给应用程序执行的内存量。android 应用程序的堆大小由设备 RAM 决定。例如,如果设备的 RAM 为 179 MB,则 android 应用程序只会获得 18MB 的堆大小。
加载图像会消耗 32MB 或 64MB 的所有堆内存(应用程序可用的内存)的问题。图像作为 ARGB 中的位图加载到堆中 - 每个像素 4 个字节。尝试对动画图像进行二次采样。您的动画有 135*700*1000*4 字节 = 360.5 MB。
您可以将方法decodeResource与 BitmapFactory.Options opts 一起使用,该方法具有参数inSampleSize,您可以在其中设置图像的子采样。也可以使用参数inPreferredConfig来设置 RGB_565 而不是 ARGB_8888,以防您不需要图像的透明度。
正如堆栈跟踪所说,它导致 OutOfMemory 错误。由于帧具有更高的分辨率并且帧数也更多,所以它给出了这个例外。