AnimationDrawable释放位图,然后重新加载它们

时间:2017-03-25 16:53:26

标签: java android bitmap

在我的应用程序中,我有一个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;回收的那个?

0 个答案:

没有答案