diff --git a/core/java/android/view/animation/Animation.java b/core/java/android/view/animation/Animation.java index e0dbe2f63487f..1536c29bee5b5 100644 --- a/core/java/android/view/animation/Animation.java +++ b/core/java/android/view/animation/Animation.java @@ -850,7 +850,7 @@ public abstract class Animation implements Cloneable { normalizedTime = currentTime < mStartTime ? 0.0f : 1.0f; } - final boolean expired = normalizedTime >= 1.0f; + final boolean expired = normalizedTime >= 1.0f || isCanceled(); mMore = !expired; if (!mFillEnabled) normalizedTime = Math.max(Math.min(normalizedTime, 1.0f), 0.0f); @@ -875,7 +875,7 @@ public abstract class Animation implements Cloneable { } if (expired) { - if (mRepeatCount == mRepeated) { + if (mRepeatCount == mRepeated || isCanceled()) { if (!mEnded) { mEnded = true; guard.close(); @@ -905,6 +905,10 @@ public abstract class Animation implements Cloneable { return mMore; } + private boolean isCanceled() { + return mStartTime == Long.MIN_VALUE; + } + private void fireAnimationStart() { if (mListener != null) { if (mListenerHandler == null) mListener.onAnimationStart(this);