我一直都会遇到这个错误。正如我所看到的,stackoverflow.com上已经有很多问题,但遗憾的是,我找不到任何适合我的答案。
我有60张PNG图像(共有2,5MB),我想把它放在动画中。
我尝试了三种不同的方式。
mAnimation = new AnimationDrawable();
mAnimation.addFrame((BitmapDrawable)getResources().getDrawable(R.drawable.yawning_00001), FPS_12);
...
mAnimation.addFrame((BitmapDrawable)getResources().getDrawable(R.drawable.yawning_00063), FPS_12);
mAnimation.start();
XML
<animation-list android:oneshot="true">
<item android:drawable="@drawable/yawning_00001" android:duration="83" />
...
<item android:drawable="@drawable/yawning_00063" android:duration="83" />
</animation-list>
爪哇
ImageView img = (ImageView)findViewById(R.id.animation);
img.setBackgroundResource(R.drawable.yawning);
AnimationDrawable frameAnimation = (AnimationDrawable) img.getBackground();
frameAnimation.start();
使用类扩展ImageView(我将在这里显示重要内容)
public void loadAnimation(String prefix, int nframes) {
mBitmapList.clear();
for (int x = 0; x < nframes; x++) {
String zeros = "000";
if (x < 10) {
zeros += "0";
}
String name = prefix + "_" + zeros + x;
Log.d(TAG, "loading animation frame: " + name);
int res_id = mContext.getResources().getIdentifier(name, "drawable", mContext.getPackageName());
d = (BitmapDrawable) mContext.getResources().getDrawable(res_id);
mBitmapList.add(d.getBitmap());
}
}
在所有情况下,我都会得到相同的错误......在15张图片加载后,所有这些都出现了。
E/AndroidRuntime(1591): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
我想知道这是否是Android中的帧动画。
有没有人可以选择逐帧动画?如果是,请链接到任何展示。
答案 0 :(得分:4)
您需要以某种方式回收图像,因为60张图像的内存不足。
您认为您的图片总共为2.5兆像素,但这是您文件的压缩版本。
如果您想知道在内存中以位图格式解压缩时文件使用了多少内存,请执行以下操作:width * height *图像数*每个像素的字节数....然后您就会知道为什么会崩溃:d
AnimationDrawable不适合那种繁重的用法。您应该开始查看SurfaceViews,然后您可以自由地实现您想要用来显示动画的任何内存管理方法。
http://developer.android.com/reference/android/view/SurfaceView.html
祝你好运。答案 1 :(得分:0)
有时,内存泄漏来自某些不是堆栈跟踪中显示的代码行。我认为你应该仔细阅读下面的文章,然后检查你自己的代码,以省略一些特殊问题,例如:
编辑: 你也应该检查这些:
调用recycle()删除未使用的位图
使用sampleSize&gt; 1减少位图大小。
Bitmap.createBitmap(宽度, height,new BitmapFactory.Options()。inSampleSize = 4)