From 24314e7d10d0354cd548de35a2c4795a87fbfb21 Mon Sep 17 00:00:00 2001 From: George Mount Date: Wed, 1 Oct 2014 14:12:09 -0700 Subject: [PATCH] Fix ChangeTransform works only once on a View. Bug 17762118 When ChangeTransform is used on a View, its intermediate values are being set, but not cleared after the transition completes unless it uses a GhostView. This CL clears the intermediate values when the animation ends if no GhostView is used. Change-Id: I2590d9c2bc36d31023b3e1af94d2bd72c9589eb5 --- core/java/android/transition/ChangeTransform.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/core/java/android/transition/ChangeTransform.java b/core/java/android/transition/ChangeTransform.java index 1b8d57c59dd0d..3fd28a6af0f6f 100644 --- a/core/java/android/transition/ChangeTransform.java +++ b/core/java/android/transition/ChangeTransform.java @@ -228,7 +228,8 @@ public class ChangeTransform extends Transition { } // Next handle the normal matrix transform: - ObjectAnimator transformAnimator = createTransformAnimator(startValues, endValues); + ObjectAnimator transformAnimator = createTransformAnimator(startValues, endValues, + handleParentChange); if (handleParentChange && transformAnimator != null && mUseOverlay) { createGhostView(sceneRoot, startValues, endValues); @@ -238,7 +239,7 @@ public class ChangeTransform extends Transition { } private ObjectAnimator createTransformAnimator(TransitionValues startValues, - TransitionValues endValues) { + TransitionValues endValues, final boolean handleParentChange) { Matrix startMatrix = (Matrix) startValues.values.get(PROPNAME_MATRIX); Matrix endMatrix = (Matrix) endValues.values.get(PROPNAME_MATRIX); @@ -277,7 +278,12 @@ public class ChangeTransform extends Transition { @Override public void onAnimationEnd(Animator animation) { if (!mIsCanceled) { - setCurrentMatrix(finalEndMatrix); + if (handleParentChange && mUseOverlay) { + setCurrentMatrix(finalEndMatrix); + } else { + view.setTagInternal(R.id.transitionTransform, null); + view.setTagInternal(R.id.parentMatrix, null); + } } ANIMATION_MATRIX_PROPERTY.set(view, null); transforms.restore(view);