OSDN Git Service

Properly notifies listener when an animation is cancelled.
authorRomain Guy <romainguy@android.com>
Tue, 9 Feb 2010 19:30:44 +0000 (11:30 -0800)
committerRomain Guy <romainguy@android.com>
Tue, 9 Feb 2010 19:36:44 +0000 (11:36 -0800)
Bug: #2428005.

api/current.xml
core/java/android/view/View.java
core/java/android/view/animation/Animation.java

index b155c45..3da6b72 100644 (file)
 <parameter name="t" type="android.view.animation.Transformation">
 </parameter>
 </method>
+<method name="cancel"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="computeDurationHint"
  return="long"
  abstract="false"
index f5c465e..889985a 100644 (file)
@@ -8281,6 +8281,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
      * Cancels any animations for this view.
      */
     public void clearAnimation() {
+        if (mCurrentAnimation != null) {
+            mCurrentAnimation.cancel();
+        }
         mCurrentAnimation = null;
     }
 
index 000e4ce..ad98259 100644 (file)
@@ -256,6 +256,27 @@ public abstract class Animation implements Cloneable {
     }
 
     /**
+     * Cancel the animation. Cancelling an animation invokes the animation
+     * listener, if set, to notify the end of the animation.
+     * 
+     * If you cancel an animation manually, you must call {@link #reset()}
+     * before starting the animation again.
+     * 
+     * @see #reset() 
+     * @see #start() 
+     * @see #startNow() 
+     */
+    public void cancel() {
+        if (mStarted && !mEnded) {
+            if (mListener != null) mListener.onAnimationEnd(this);
+            mEnded = true;
+        }
+        // Make sure we move the animation to the end
+        mStartTime = Long.MIN_VALUE;
+        mMore = mOneMoreTime = false;
+    }
+
+    /**
      * Whether or not the animation has been initialized.
      *
      * @return Has this animation been initialized.