diff options
| author | George Mount <mount@google.com> | 2016-02-04 15:24:30 -0800 |
|---|---|---|
| committer | George Mount <mount@google.com> | 2016-02-08 20:33:49 +0000 |
| commit | 5affef077316e73337eb42a098a126b01d20568e (patch) | |
| tree | 8c936e29aa7ccd7531a4566ce00ca269d0b3da5d /core/java/android/transition/Fade.java | |
| parent | 95728a5db6595e473acf8f428f238afc2fdbbe80 (diff) | |
Fix Fade transition interrupt.
Bug 26963113
When a Fade transition is interrupted and reversed, the
View started the animation from the beginning. This change
captures the previous transitionAlpha and starts the animation
from the previous alpha state.
Change-Id: I801fe9ade6af4cf8446838e231bdc71841668a18
(cherry picked from commit 3cf9fa3db0231d035142c27992818d8f7827ac3e)
Diffstat (limited to 'core/java/android/transition/Fade.java')
| -rw-r--r-- | core/java/android/transition/Fade.java | 37 |
1 files changed, 21 insertions, 16 deletions
diff --git a/core/java/android/transition/Fade.java b/core/java/android/transition/Fade.java index 287c69608b8b..b2e8d3351028 100644 --- a/core/java/android/transition/Fade.java +++ b/core/java/android/transition/Fade.java @@ -57,9 +57,9 @@ import android.view.ViewGroup; * tag <code>fade</code>, along with the standard * attributes of {@link android.R.styleable#Fade} and * {@link android.R.styleable#Transition}.</p> - */ public class Fade extends Visibility { + static final String PROPNAME_TRANSITION_ALPHA = "android:fade:transitionAlpha"; private static boolean DBG = Transition.DBG && false; @@ -105,6 +105,13 @@ public class Fade extends Visibility { setMode(fadingMode); } + @Override + public void captureStartValues(TransitionValues transitionValues) { + super.captureStartValues(transitionValues); + transitionValues.values.put(PROPNAME_TRANSITION_ALPHA, + transitionValues.view.getTransitionAlpha()); + } + /** * Utility method to handle creating and running the Animator. */ @@ -119,7 +126,6 @@ public class Fade extends Visibility { } final FadeAnimatorListener listener = new FadeAnimatorListener(view); anim.addListener(listener); - anim.addPauseListener(listener); addListener(new TransitionListenerAdapter() { @Override public void onTransitionEnd(Transition transition) { @@ -138,18 +144,28 @@ public class Fade extends Visibility { Log.d(LOG_TAG, "Fade.onAppear: startView, startVis, endView, endVis = " + startView + ", " + view); } - return createAnimation(view, 0, 1); + float startAlpha = 0; + if (startValues != null) { + startAlpha = (Float) startValues.values.get(PROPNAME_TRANSITION_ALPHA); + if (startAlpha == 1) { + startAlpha = 0; + } + } + return createAnimation(view, startAlpha, 1); } @Override public Animator onDisappear(ViewGroup sceneRoot, final View view, TransitionValues startValues, TransitionValues endValues) { - return createAnimation(view, 1, 0); + float startAlpha = 1; + if (startValues != null) { + startAlpha = (Float) startValues.values.get(PROPNAME_TRANSITION_ALPHA); + } + return createAnimation(view, startAlpha, 0); } private static class FadeAnimatorListener extends AnimatorListenerAdapter { private final View mView; - private float mPausedAlpha = -1; private boolean mLayerTypeChanged = false; public FadeAnimatorListener(View view) { @@ -171,16 +187,5 @@ public class Fade extends Visibility { mView.setLayerType(View.LAYER_TYPE_NONE, null); } } - - @Override - public void onAnimationPause(Animator animator) { - mPausedAlpha = mView.getTransitionAlpha(); - mView.setTransitionAlpha(1); - } - - @Override - public void onAnimationResume(Animator animator) { - mView.setTransitionAlpha(mPausedAlpha); - } } } |
