From dc5bf6a7f0e9d05a1019bb01b406ec1f54cdaa2b Mon Sep 17 00:00:00 2001 From: George Mount Date: Wed, 17 Sep 2014 15:28:06 -0700 Subject: Default to using hardware layer during fade transition. Bug 17499864 When hasOverlappingRendering() is true, a layer is used to to fade views because performance can be much worse then. When hasOverlappingRendering() is false, the performance is not hurt and a layer is not used. Change-Id: If3fb1c23ffc8d0bef85c9d16df6c26ff4bbd49ac --- core/java/android/transition/Fade.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/core/java/android/transition/Fade.java b/core/java/android/transition/Fade.java index 1f9d093..e7857c0 100644 --- a/core/java/android/transition/Fade.java +++ b/core/java/android/transition/Fade.java @@ -145,12 +145,21 @@ public class Fade extends Visibility { private final View mView; private boolean mCanceled = false; private float mPausedAlpha = -1; + private boolean mLayerTypeChanged = false; public FadeAnimatorListener(View view) { mView = view; } @Override + public void onAnimationStart(Animator animator) { + if (mView.hasOverlappingRendering() && mView.getLayerType() == View.LAYER_TYPE_NONE) { + mLayerTypeChanged = true; + mView.setLayerType(View.LAYER_TYPE_HARDWARE, null); + } + } + + @Override public void onAnimationCancel(Animator animator) { mCanceled = true; if (mPausedAlpha >= 0) { @@ -163,6 +172,9 @@ public class Fade extends Visibility { if (!mCanceled) { mView.setTransitionAlpha(1); } + if (mLayerTypeChanged) { + mView.setLayerType(View.LAYER_TYPE_NONE, null); + } } @Override -- cgit v1.1