Loading graphics/java/android/graphics/drawable/RippleAnimationSession.java +13 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ public final class RippleAnimationSession { private long mStartTime; private boolean mForceSoftware; private Animator mLoopAnimation; private Animator mCurrentAnimation; RippleAnimationSession(@NonNull AnimationProperties<Float, Paint> properties, boolean forceSoftware) { Loading @@ -74,6 +75,12 @@ public final class RippleAnimationSession { return this; } void end() { if (mCurrentAnimation != null) { mCurrentAnimation.end(); } } @NonNull RippleAnimationSession exit(Canvas canvas) { if (isHwAccelerated(canvas)) exitHardware((RecordingCanvas) canvas); else exitSoftware(); Loading Loading @@ -114,10 +121,12 @@ public final class RippleAnimationSession { if (mLoopAnimation != null) mLoopAnimation.cancel(); Consumer<RippleAnimationSession> onEnd = mOnSessionEnd; if (onEnd != null) onEnd.accept(RippleAnimationSession.this); if (mCurrentAnimation == expand) mCurrentAnimation = null; } }); expand.setInterpolator(LINEAR_INTERPOLATOR); expand.start(); mCurrentAnimation = expand; } private long computeDelay() { Loading Loading @@ -147,6 +156,7 @@ public final class RippleAnimationSession { if (mLoopAnimation != null) mLoopAnimation.cancel(); Consumer<RippleAnimationSession> onEnd = mOnSessionEnd; if (onEnd != null) onEnd.accept(RippleAnimationSession.this); if (mCurrentAnimation == exit) mCurrentAnimation = null; } }); exit.setTarget(canvas); Loading @@ -155,6 +165,7 @@ public final class RippleAnimationSession { long delay = computeDelay(); exit.setStartDelay(delay); exit.start(); mCurrentAnimation = exit; } private void enterHardware(RecordingCanvas canvas) { Loading @@ -167,6 +178,7 @@ public final class RippleAnimationSession { mStartTime + MAX_NOISE_PHASE); loop.setTarget(canvas); startAnimation(expand, loop); mCurrentAnimation = expand; } private void startAnimation(Animator expand, Animator loop) { Loading Loading @@ -200,6 +212,7 @@ public final class RippleAnimationSession { mProperties.getShader().setNoisePhase((float) loop.getAnimatedValue()); }); startAnimation(expand, loop); mCurrentAnimation = expand; } void setRadius(float radius) { Loading graphics/java/android/graphics/drawable/RippleDrawable.java +10 −2 Original line number Diff line number Diff line Loading @@ -278,6 +278,15 @@ public class RippleDrawable extends LayerDrawable { } cancelExitingRipples(); endPatternedAnimations(); } private void endPatternedAnimations() { for (int i = 0; i < mRunningAnimations.size(); i++) { RippleAnimationSession session = mRunningAnimations.get(i); session.end(); } mRunningAnimations.clear(); } private void cancelExitingRipples() { Loading @@ -291,7 +300,6 @@ public class RippleDrawable extends LayerDrawable { Arrays.fill(ripples, 0, count, null); } mExitingRipplesCount = 0; mExitingAnimation = true; // Always draw an additional "clean" frame after canceling animations. invalidateSelf(false); } Loading Loading @@ -714,7 +722,7 @@ public class RippleDrawable extends LayerDrawable { } cancelExitingRipples(); exitPatternedAnimation(); endPatternedAnimations(); } @Override Loading Loading
graphics/java/android/graphics/drawable/RippleAnimationSession.java +13 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ public final class RippleAnimationSession { private long mStartTime; private boolean mForceSoftware; private Animator mLoopAnimation; private Animator mCurrentAnimation; RippleAnimationSession(@NonNull AnimationProperties<Float, Paint> properties, boolean forceSoftware) { Loading @@ -74,6 +75,12 @@ public final class RippleAnimationSession { return this; } void end() { if (mCurrentAnimation != null) { mCurrentAnimation.end(); } } @NonNull RippleAnimationSession exit(Canvas canvas) { if (isHwAccelerated(canvas)) exitHardware((RecordingCanvas) canvas); else exitSoftware(); Loading Loading @@ -114,10 +121,12 @@ public final class RippleAnimationSession { if (mLoopAnimation != null) mLoopAnimation.cancel(); Consumer<RippleAnimationSession> onEnd = mOnSessionEnd; if (onEnd != null) onEnd.accept(RippleAnimationSession.this); if (mCurrentAnimation == expand) mCurrentAnimation = null; } }); expand.setInterpolator(LINEAR_INTERPOLATOR); expand.start(); mCurrentAnimation = expand; } private long computeDelay() { Loading Loading @@ -147,6 +156,7 @@ public final class RippleAnimationSession { if (mLoopAnimation != null) mLoopAnimation.cancel(); Consumer<RippleAnimationSession> onEnd = mOnSessionEnd; if (onEnd != null) onEnd.accept(RippleAnimationSession.this); if (mCurrentAnimation == exit) mCurrentAnimation = null; } }); exit.setTarget(canvas); Loading @@ -155,6 +165,7 @@ public final class RippleAnimationSession { long delay = computeDelay(); exit.setStartDelay(delay); exit.start(); mCurrentAnimation = exit; } private void enterHardware(RecordingCanvas canvas) { Loading @@ -167,6 +178,7 @@ public final class RippleAnimationSession { mStartTime + MAX_NOISE_PHASE); loop.setTarget(canvas); startAnimation(expand, loop); mCurrentAnimation = expand; } private void startAnimation(Animator expand, Animator loop) { Loading Loading @@ -200,6 +212,7 @@ public final class RippleAnimationSession { mProperties.getShader().setNoisePhase((float) loop.getAnimatedValue()); }); startAnimation(expand, loop); mCurrentAnimation = expand; } void setRadius(float radius) { Loading
graphics/java/android/graphics/drawable/RippleDrawable.java +10 −2 Original line number Diff line number Diff line Loading @@ -278,6 +278,15 @@ public class RippleDrawable extends LayerDrawable { } cancelExitingRipples(); endPatternedAnimations(); } private void endPatternedAnimations() { for (int i = 0; i < mRunningAnimations.size(); i++) { RippleAnimationSession session = mRunningAnimations.get(i); session.end(); } mRunningAnimations.clear(); } private void cancelExitingRipples() { Loading @@ -291,7 +300,6 @@ public class RippleDrawable extends LayerDrawable { Arrays.fill(ripples, 0, count, null); } mExitingRipplesCount = 0; mExitingAnimation = true; // Always draw an additional "clean" frame after canceling animations. invalidateSelf(false); } Loading Loading @@ -714,7 +722,7 @@ public class RippleDrawable extends LayerDrawable { } cancelExitingRipples(); exitPatternedAnimation(); endPatternedAnimations(); } @Override Loading