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
This commit is contained in:
George Mount
2014-10-01 14:12:09 -07:00
parent 39838b98f1
commit 24314e7d10

View File

@@ -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);