diff --git a/core/java/android/transition/Transition.java b/core/java/android/transition/Transition.java index 8819d220e7485..0feab4d027a99 100644 --- a/core/java/android/transition/Transition.java +++ b/core/java/android/transition/Transition.java @@ -1947,16 +1947,21 @@ public abstract class Transition implements Cloneable { * @hide */ void forceToEnd(ViewGroup sceneRoot) { - ArrayMap runningAnimators = getRunningAnimators(); + final ArrayMap runningAnimators = getRunningAnimators(); int numOldAnims = runningAnimators.size(); - if (sceneRoot != null) { - WindowId windowId = sceneRoot.getWindowId(); - for (int i = numOldAnims - 1; i >= 0; i--) { - AnimationInfo info = runningAnimators.valueAt(i); - if (info.view != null && windowId != null && windowId.equals(info.windowId)) { - Animator anim = runningAnimators.keyAt(i); - anim.end(); - } + if (sceneRoot == null || numOldAnims == 0) { + return; + } + + WindowId windowId = sceneRoot.getWindowId(); + final ArrayMap oldAnimators = new ArrayMap(runningAnimators); + runningAnimators.clear(); + + for (int i = numOldAnims - 1; i >= 0; i--) { + AnimationInfo info = oldAnimators.valueAt(i); + if (info.view != null && windowId != null && windowId.equals(info.windowId)) { + Animator anim = oldAnimators.keyAt(i); + anim.end(); } } }