在我的应用程序中,我有一个AnimationDrawable
,以及带有很多图像的XML(这里我只显示了3个)。
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item android:drawable="@drawable/anim1" android:duration="180" />
<item android:drawable="@drawable/anim2" android:duration="60" />
<item android:drawable="@drawable/anim3" android:duration="60" />
</animation-list>
My AnimationDrawable在我的应用程序中通常很少被调用,例如每个会话一次或甚至不调用,但每次会话也可以调用更多次。 因此我决定在显示这个AnimationDrawable后清除位图图像,因此它们不在内存中(这将是无用的,因为在90%它可能不会在当前的启动中再次使用)。 我使用以下代码从内存中清除它:
void releaseAnimationDrawable(AnimationDrawable ad)
{
ad.stop();
for (int i = 0; i < ad.getNumberOfFrames(); ++i){
Drawable frame = ad.getFrame(i);
if (frame instanceof BitmapDrawable) {
((BitmapDrawable)frame).getBitmap().recycle();
}
frame.setCallback(null);
}
ad.setCallback(null);
}
但是.. 当我使用这个AnimationDrawable一次,然后使用上面的代码释放它,然后再尝试再次创建它,我收到错误:
Cannot draw recycled bitmaps
我每次都会通过以下方式获得动画:
animationDrawable = (AnimationDrawable) myView.getBackground(); // view bg is xml sequence of images I've mentioned above
我认为存在问题,因为Android不想再创建具有相同宽度和高度的位图,因此它会尝试使用旧的位图 - 但这已经被回收了。
我想要的只是每次都创建新的AnimationDrawable
。怎么做,而不是&#34;重用&#34;回收的那个?