Loading graphics/java/android/graphics/drawable/RippleAnimationSession.java +14 −17 Original line number Diff line number Diff line Loading @@ -49,23 +49,12 @@ public final class RippleAnimationSession { private Runnable mOnUpdate; private long mStartTime; private boolean mForceSoftware; private final ValueAnimator mSparkle = ValueAnimator.ofFloat(0, 1); private boolean mAnimateSparkle; RippleAnimationSession(@NonNull AnimationProperties<Float, Paint> properties, boolean forceSoftware) { mProperties = properties; mForceSoftware = forceSoftware; mSparkle.addUpdateListener(anim -> { final long now = AnimationUtils.currentAnimationTimeMillis(); final long elapsed = now - mStartTime - ENTER_ANIM_DURATION; final float phase = (float) elapsed / 800; mProperties.getShader().setNoisePhase(phase); notifyUpdate(); }); mSparkle.setDuration(ENTER_ANIM_DURATION); mSparkle.setInterpolator(LINEAR_INTERPOLATOR); mSparkle.setRepeatCount(ValueAnimator.INFINITE); } @NonNull RippleAnimationSession enter(Canvas canvas) { Loading Loading @@ -99,6 +88,16 @@ public final class RippleAnimationSession { return this; } public boolean shouldAnimateSparkle() { return mAnimateSparkle; } public float getSparklePhase() { final long now = AnimationUtils.currentAnimationTimeMillis(); final long elapsed = now - mStartTime; return (float) elapsed / 800; } private boolean isHwAccelerated(Canvas canvas) { return canvas.isHardwareAccelerated() && !mForceSoftware; } Loading @@ -115,7 +114,7 @@ public final class RippleAnimationSession { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); mSparkle.end(); mAnimateSparkle = false; Consumer<RippleAnimationSession> onEnd = mOnSessionEnd; if (onEnd != null) onEnd.accept(RippleAnimationSession.this); } Loading Loading @@ -149,7 +148,7 @@ public final class RippleAnimationSession { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); mSparkle.end(); mAnimateSparkle = false; Consumer<RippleAnimationSession> onEnd = mOnSessionEnd; if (onEnd != null) onEnd.accept(RippleAnimationSession.this); } Loading @@ -176,9 +175,7 @@ public final class RippleAnimationSession { expand.addListener(new AnimatorListener(this)); expand.setInterpolator(FAST_OUT_LINEAR_IN); expand.start(); if (!mSparkle.isRunning()) { mSparkle.start(); } mAnimateSparkle = true; } private void enterSoftware() { Loading graphics/java/android/graphics/drawable/RippleDrawable.java +9 −0 Original line number Diff line number Diff line Loading @@ -861,6 +861,15 @@ public class RippleDrawable extends LayerDrawable { } for (int i = 0; i < mRunningAnimations.size(); i++) { RippleAnimationSession s = mRunningAnimations.get(i); if (s.shouldAnimateSparkle()) { final float phase = s.getSparklePhase(); if (useCanvasProps) { s.getCanvasProperties().getShader().setNoisePhase(phase); } else { s.getProperties().getShader().setNoisePhase(phase); } invalidateSelf(); } if (useCanvasProps) { RippleAnimationSession.AnimationProperties<CanvasProperty<Float>, CanvasProperty<Paint>> Loading Loading
graphics/java/android/graphics/drawable/RippleAnimationSession.java +14 −17 Original line number Diff line number Diff line Loading @@ -49,23 +49,12 @@ public final class RippleAnimationSession { private Runnable mOnUpdate; private long mStartTime; private boolean mForceSoftware; private final ValueAnimator mSparkle = ValueAnimator.ofFloat(0, 1); private boolean mAnimateSparkle; RippleAnimationSession(@NonNull AnimationProperties<Float, Paint> properties, boolean forceSoftware) { mProperties = properties; mForceSoftware = forceSoftware; mSparkle.addUpdateListener(anim -> { final long now = AnimationUtils.currentAnimationTimeMillis(); final long elapsed = now - mStartTime - ENTER_ANIM_DURATION; final float phase = (float) elapsed / 800; mProperties.getShader().setNoisePhase(phase); notifyUpdate(); }); mSparkle.setDuration(ENTER_ANIM_DURATION); mSparkle.setInterpolator(LINEAR_INTERPOLATOR); mSparkle.setRepeatCount(ValueAnimator.INFINITE); } @NonNull RippleAnimationSession enter(Canvas canvas) { Loading Loading @@ -99,6 +88,16 @@ public final class RippleAnimationSession { return this; } public boolean shouldAnimateSparkle() { return mAnimateSparkle; } public float getSparklePhase() { final long now = AnimationUtils.currentAnimationTimeMillis(); final long elapsed = now - mStartTime; return (float) elapsed / 800; } private boolean isHwAccelerated(Canvas canvas) { return canvas.isHardwareAccelerated() && !mForceSoftware; } Loading @@ -115,7 +114,7 @@ public final class RippleAnimationSession { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); mSparkle.end(); mAnimateSparkle = false; Consumer<RippleAnimationSession> onEnd = mOnSessionEnd; if (onEnd != null) onEnd.accept(RippleAnimationSession.this); } Loading Loading @@ -149,7 +148,7 @@ public final class RippleAnimationSession { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); mSparkle.end(); mAnimateSparkle = false; Consumer<RippleAnimationSession> onEnd = mOnSessionEnd; if (onEnd != null) onEnd.accept(RippleAnimationSession.this); } Loading @@ -176,9 +175,7 @@ public final class RippleAnimationSession { expand.addListener(new AnimatorListener(this)); expand.setInterpolator(FAST_OUT_LINEAR_IN); expand.start(); if (!mSparkle.isRunning()) { mSparkle.start(); } mAnimateSparkle = true; } private void enterSoftware() { Loading
graphics/java/android/graphics/drawable/RippleDrawable.java +9 −0 Original line number Diff line number Diff line Loading @@ -861,6 +861,15 @@ public class RippleDrawable extends LayerDrawable { } for (int i = 0; i < mRunningAnimations.size(); i++) { RippleAnimationSession s = mRunningAnimations.get(i); if (s.shouldAnimateSparkle()) { final float phase = s.getSparklePhase(); if (useCanvasProps) { s.getCanvasProperties().getShader().setNoisePhase(phase); } else { s.getProperties().getShader().setNoisePhase(phase); } invalidateSelf(); } if (useCanvasProps) { RippleAnimationSession.AnimationProperties<CanvasProperty<Float>, CanvasProperty<Paint>> Loading