From d617ef402d760fa7f708869888e4903a0b02063e Mon Sep 17 00:00:00 2001 From: seven332 Date: Sun, 10 May 2015 02:41:13 +0800 Subject: [PATCH] Add RenderNodeAnimator support check --- .../java/com/hippo/effect/ViewTransition.java | 6 ++--- .../ehviewer/ui/scene/GalleryListScene.java | 4 ++-- ...rpolatorUtils.java => AnimationUtils.java} | 24 ++++++++++++++++++- .../java/com/hippo/widget/CheckTextView.java | 13 +++++----- .../main/java/com/hippo/widget/FabLayout.java | 6 ++--- 5 files changed, 36 insertions(+), 17 deletions(-) rename app/src/main/java/com/hippo/util/{InterpolatorUtils.java => AnimationUtils.java} (60%) diff --git a/app/src/main/java/com/hippo/effect/ViewTransition.java b/app/src/main/java/com/hippo/effect/ViewTransition.java index 271f88c81..ba4d7234d 100644 --- a/app/src/main/java/com/hippo/effect/ViewTransition.java +++ b/app/src/main/java/com/hippo/effect/ViewTransition.java @@ -17,11 +17,11 @@ package com.hippo.effect; import android.animation.Animator; import android.animation.ObjectAnimator; -import android.os.Build; import android.view.RenderNodeAnimator; import android.view.View; import com.hippo.animation.SimpleAnimatorListener; +import com.hippo.util.AnimationUtils; import com.hippo.util.ViewUtils; public class ViewTransition { @@ -83,9 +83,7 @@ public class ViewTransition { } View viewToHide = views[oldShownView]; View viewToShow = views[shownView]; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && - viewToHide.isAttachedToWindow() && - viewToShow.isAttachedToWindow()) { + if (AnimationUtils.isSupportRenderNodeAnimator(viewToHide, viewToShow)) { startAnimationsL(viewToHide, viewToShow); } else { startAnimations(views[oldShownView], views[shownView]); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java index a2f3a69e7..3a23fd1df 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java @@ -52,8 +52,8 @@ import com.hippo.ehviewer.widget.SearchBar; import com.hippo.ehviewer.widget.SearchDatabase; import com.hippo.ehviewer.widget.SearchLayout; import com.hippo.scene.Scene; +import com.hippo.util.AnimationUtils; import com.hippo.util.AssertUtils; -import com.hippo.util.InterpolatorUtils; import com.hippo.util.Log; import com.hippo.util.MathUtils; import com.hippo.util.ViewUtils; @@ -226,7 +226,7 @@ public class GalleryListScene extends Scene implements SearchBar.Helper, PropertyValuesHolder scaleYPvh = PropertyValuesHolder.ofFloat("scaleY", 1f, 0f); ObjectAnimator oa = ObjectAnimator.ofPropertyValuesHolder(mCornerFab, scaleXPvh, scaleYPvh); oa.setDuration(ANIMATE_TIME / 2); - oa.setInterpolator(InterpolatorUtils.SLOW_FAST_INTERPOLATOR); + oa.setInterpolator(AnimationUtils.SLOW_FAST_INTERPOLATOR); oa.setRepeatCount(1); oa.setRepeatMode(ValueAnimator.REVERSE); final Drawable finalDrawable = drawable; diff --git a/app/src/main/java/com/hippo/util/InterpolatorUtils.java b/app/src/main/java/com/hippo/util/AnimationUtils.java similarity index 60% rename from app/src/main/java/com/hippo/util/InterpolatorUtils.java rename to app/src/main/java/com/hippo/util/AnimationUtils.java index f08a0b6c3..97d8b205d 100644 --- a/app/src/main/java/com/hippo/util/InterpolatorUtils.java +++ b/app/src/main/java/com/hippo/util/AnimationUtils.java @@ -15,14 +15,36 @@ package com.hippo.util; +import android.annotation.TargetApi; +import android.graphics.Canvas; +import android.os.Build; import android.support.v4.view.animation.FastOutLinearInInterpolator; import android.support.v4.view.animation.FastOutSlowInInterpolator; import android.support.v4.view.animation.LinearOutSlowInInterpolator; +import android.view.View; import android.view.animation.Interpolator; -public final class InterpolatorUtils { +public final class AnimationUtils { public static final Interpolator FAST_SLOW_INTERPOLATOR = new LinearOutSlowInInterpolator(); public static final Interpolator SLOW_FAST_INTERPOLATOR = new FastOutLinearInInterpolator(); public static final Interpolator SLOW_FAST_SLOW_INTERPOLATOR = new FastOutSlowInInterpolator(); + + @TargetApi(Build.VERSION_CODES.KITKAT) + public static boolean isSupportRenderNodeAnimator(View... views) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { + return false; + } + for (View v : views) { + if (!v.isAttachedToWindow()) { + return false; + } + } + return true; + } + + public static boolean isSupportRenderNodeAnimator(Canvas canvas) { + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && + canvas.isHardwareAccelerated(); + } } diff --git a/app/src/main/java/com/hippo/widget/CheckTextView.java b/app/src/main/java/com/hippo/widget/CheckTextView.java index 850845c27..d04a6fddd 100644 --- a/app/src/main/java/com/hippo/widget/CheckTextView.java +++ b/app/src/main/java/com/hippo/widget/CheckTextView.java @@ -35,7 +35,7 @@ import android.widget.TextView; import com.hippo.animation.SimpleAnimatorListener; import com.hippo.ehviewer.R; -import com.hippo.util.InterpolatorUtils; +import com.hippo.util.AnimationUtils; import com.hippo.util.MathUtils; public class CheckTextView extends TextView implements OnClickListener, Hotspotable { @@ -141,11 +141,11 @@ public class CheckTextView extends TextView implements OnClickListener, Hotspota if (mChecked) { startRadius = 0; endRadius = mMaxRadius; - interpolator = InterpolatorUtils.FAST_SLOW_INTERPOLATOR; + interpolator = AnimationUtils.FAST_SLOW_INTERPOLATOR; } else { startRadius = mMaxRadius; endRadius = 0; - interpolator = InterpolatorUtils.SLOW_FAST_INTERPOLATOR; + interpolator = AnimationUtils.SLOW_FAST_INTERPOLATOR; } mPropPaint = CanvasProperty.createPaint(mPaint); mPropRadius = CanvasProperty.createFloat(startRadius); @@ -168,11 +168,11 @@ public class CheckTextView extends TextView implements OnClickListener, Hotspota if (mChecked) { startRadius = 0; endRadius = mMaxRadius; - interpolator = InterpolatorUtils.FAST_SLOW_INTERPOLATOR; + interpolator = AnimationUtils.FAST_SLOW_INTERPOLATOR; } else { startRadius = mMaxRadius; endRadius = 0; - interpolator = InterpolatorUtils.SLOW_FAST_INTERPOLATOR; + interpolator = AnimationUtils.SLOW_FAST_INTERPOLATOR; } mRadius = startRadius; @@ -199,8 +199,7 @@ public class CheckTextView extends TextView implements OnClickListener, Hotspota protected void onDraw(@NonNull Canvas canvas) { super.onDraw(canvas); - boolean useHardware = canvas.isHardwareAccelerated() && - Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP; + boolean useHardware = AnimationUtils.isSupportRenderNodeAnimator(canvas); if (mPrepareAnimator) { mPrepareAnimator = false; diff --git a/app/src/main/java/com/hippo/widget/FabLayout.java b/app/src/main/java/com/hippo/widget/FabLayout.java index e5a2c7672..bce090402 100644 --- a/app/src/main/java/com/hippo/widget/FabLayout.java +++ b/app/src/main/java/com/hippo/widget/FabLayout.java @@ -30,7 +30,7 @@ import android.view.animation.Interpolator; import com.hippo.animation.SimpleAnimatorListener; import com.hippo.ehviewer.R; -import com.hippo.util.InterpolatorUtils; +import com.hippo.util.AnimationUtils; public class FabLayout extends ViewGroup implements View.OnClickListener { @@ -272,14 +272,14 @@ public class FabLayout extends ViewGroup implements View.OnClickListener { endTranslationY = 0f; startAlpha = 0f; endAlpha = 1f; - interpolator = InterpolatorUtils.FAST_SLOW_INTERPOLATOR; + interpolator = AnimationUtils.FAST_SLOW_INTERPOLATOR; } else { startTranslationY = 0f; endTranslationY = mMainFabCenterY - (child.getTop() + (child.getHeight() / 2)); startAlpha = 1f; endAlpha = 0f; - interpolator = InterpolatorUtils.SLOW_FAST_INTERPOLATOR; + interpolator = AnimationUtils.SLOW_FAST_INTERPOLATOR; } PropertyValuesHolder translationYPvh = PropertyValuesHolder.ofFloat(