From f7917e656b94ec2adfc3fa826e093665d39748d2 Mon Sep 17 00:00:00 2001 From: Chet Haase Date: Mon, 19 Dec 2011 15:49:42 -0800 Subject: [PATCH] Fix AnimationDrawable double-start bug AnimationDrawable.setVisible(true, true) was not correctly recording the fact that it had started the animation, so it was possible to call start(0 immediately afterwards and have two animations running on the drawable in parallel, resulting in incorrect frame ordering. Issue #5782773 Change-Id: Ifc328f755a51d10ab76b84006d1999df03d2dca1 --- .../java/android/graphics/drawable/AnimationDrawable.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/graphics/java/android/graphics/drawable/AnimationDrawable.java b/graphics/java/android/graphics/drawable/AnimationDrawable.java index 7efdc6cf02039..f02d0f99ae49c 100644 --- a/graphics/java/android/graphics/drawable/AnimationDrawable.java +++ b/graphics/java/android/graphics/drawable/AnimationDrawable.java @@ -42,7 +42,7 @@ import android.util.AttributeSet; *

spin_animation.xml file in res/drawable/ folder:

*
<!-- Animation frames are wheel0.png -- wheel5.png files inside the
  * res/drawable/ folder -->
- * <animation-list android:id="selected" android:oneshot="false">
+ * <animation-list android:id="@+id/selected" android:oneshot="false">
  *    <item android:drawable="@drawable/wheel0" android:duration="50" />
  *    <item android:drawable="@drawable/wheel1" android:duration="50" />
  *    <item android:drawable="@drawable/wheel2" android:duration="50" />
@@ -216,6 +216,8 @@ public class AnimationDrawable extends DrawableContainer implements Runnable, An
             unscheduleSelf(this);
         }
         if (animate) {
+            // Unscheduling may have clobbered this value; restore it to record that we're animating
+            mCurFrame = frame;
             scheduleSelf(this, SystemClock.uptimeMillis() + mAnimationState.mDurations[frame]);
         }
     }