diff options
| -rw-r--r-- | core/java/android/view/RenderNodeAnimator.java | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/core/java/android/view/RenderNodeAnimator.java b/core/java/android/view/RenderNodeAnimator.java index a56d44839b13..9433237f4516 100644 --- a/core/java/android/view/RenderNodeAnimator.java +++ b/core/java/android/view/RenderNodeAnimator.java @@ -19,6 +19,7 @@ package android.view; import android.animation.Animator; import android.animation.TimeInterpolator; import android.animation.ValueAnimator; +import android.animation.Animator.AnimatorListener; import android.graphics.Canvas; import android.graphics.CanvasProperty; import android.graphics.Paint; @@ -202,7 +203,7 @@ public class RenderNodeAnimator extends Animator { mViewTarget.mTransformationInfo.mAlpha = mFinalValue; } - final ArrayList<AnimatorListener> listeners = getListeners(); + final ArrayList<AnimatorListener> listeners = cloneListeners(); final int numListeners = listeners == null ? 0 : listeners.size(); for (int i = 0; i < numListeners; i++) { listeners.get(i).onAnimationStart(this); @@ -220,7 +221,7 @@ public class RenderNodeAnimator extends Animator { getHelper().removeDelayedAnimation(this); nEnd(mNativePtr.get()); - final ArrayList<AnimatorListener> listeners = getListeners(); + final ArrayList<AnimatorListener> listeners = cloneListeners(); final int numListeners = listeners == null ? 0 : listeners.size(); for (int i = 0; i < numListeners; i++) { listeners.get(i).onAnimationCancel(this); @@ -329,13 +330,22 @@ public class RenderNodeAnimator extends Animator { protected void onFinished() { mFinished = true; - final ArrayList<AnimatorListener> listeners = getListeners(); + final ArrayList<AnimatorListener> listeners = cloneListeners(); final int numListeners = listeners == null ? 0 : listeners.size(); for (int i = 0; i < numListeners; i++) { listeners.get(i).onAnimationEnd(this); } } + @SuppressWarnings("unchecked") + private ArrayList<AnimatorListener> cloneListeners() { + ArrayList<AnimatorListener> listeners = getListeners(); + if (listeners != null) { + listeners = (ArrayList<AnimatorListener>) listeners.clone(); + } + return listeners; + } + long getNativeAnimator() { return mNativePtr.get(); } |