From c67ff5fcfafd4568c434ece838794c858036ce2f Mon Sep 17 00:00:00 2001 From: gansgar Date: Sun, 16 Dec 2018 15:34:03 +0100 Subject: [PATCH] Add custom indetermined sweep and start animations --- .../CircularProgressBar.java | 59 +++++++++++++++++-- 1 file changed, 54 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/budiyev/android/circularprogressbar/CircularProgressBar.java b/src/main/java/com/budiyev/android/circularprogressbar/CircularProgressBar.java index c30986d..feeb328 100644 --- a/src/main/java/com/budiyev/android/circularprogressbar/CircularProgressBar.java +++ b/src/main/java/com/budiyev/android/circularprogressbar/CircularProgressBar.java @@ -68,7 +68,9 @@ public final class CircularProgressBar extends View { private static final boolean DEFAULT_ANIMATE_PROGRESS = true; private static final boolean DEFAULT_DRAW_BACKGROUND_STROKE = false; private static final boolean DEFAULT_INDETERMINATE = false; - private static final TimeInterpolator DEFAULT_PROGRESS_ANIMATOR = new DecelerateInterpolator(); + private static final TimeInterpolator DEFAULT_PROGRESS_ANIMATION_INTERPOLATOR = new DecelerateInterpolator(); + private static final TimeInterpolator DEFAULT_SWEEP_ANIMATION_INTERPOLATOR = new LinearInterpolator(); + private static final TimeInterpolator DEFAULT_START_ANIMATION_INTERPOLATOR = new DecelerateInterpolator(); private final Runnable mSweepRestartAction = new SweepRestartAction(); private final RectF mDrawRect = new RectF(); @@ -134,6 +136,46 @@ public void setIndeterminate(final boolean indeterminate) { } } + /** + * Get interpolator used by start animation in + * indeterminate mode + */ + public TimeInterpolator getIndeterminateStartInterpolator() { + return mIndeterminateStartAnimator.getInterpolator(); + } + + /** + * Set interpolation for start animator that + * are used in indeterminate mode. + */ + public void setIndeterminateStartInterpolator(final TimeInterpolator startInterpolator) { + stopIndeterminateAnimations(); + mIndeterminateStartAnimator.setInterpolator( + startInterpolator == null ? DEFAULT_START_ANIMATION_INTERPOLATOR : startInterpolator + ); + setIndeterminate(mIndeterminate); + } + + /** + * Return interpolator used by Sweep Animation in + * indeterminate mode + */ + public TimeInterpolator getIndeterminateSweepInterpolator() { + return mIndeterminateSweepAnimator.getInterpolator(); + } + + /** + * Set interpolation for sweep animator that + * are used in indeterminate mode. + */ + public void setIndeterminateSweepInterpolator(final TimeInterpolator sweepInterpolator) { + stopIndeterminateAnimations(); + mIndeterminateSweepAnimator.setInterpolator( + sweepInterpolator == null ? DEFAULT_SWEEP_ANIMATION_INTERPOLATOR : sweepInterpolator + ); + setIndeterminate(mIndeterminate); + } + /** * Get current progress value for non-indeterminate mode */ @@ -166,7 +208,14 @@ public void setProgressInterpolator(final TimeInterpolator interpolator) { mProgressAnimator.end(); } } - mProgressAnimator.setInterpolator(interpolator == null ? DEFAULT_PROGRESS_ANIMATOR : interpolator); + mProgressAnimator.setInterpolator(interpolator == null ? DEFAULT_PROGRESS_ANIMATION_INTERPOLATOR : interpolator); + } + + /** + * Returns progress animator used to animate setting the progress + */ + public TimeInterpolator getProgressInterpolator() { + return mProgressAnimator.getInterpolator(); } /** @@ -615,15 +664,15 @@ private void initialize(@NonNull final Context context, @Nullable final Attribut } } } - mProgressAnimator.setInterpolator(DEFAULT_PROGRESS_ANIMATOR); + mProgressAnimator.setInterpolator(DEFAULT_PROGRESS_ANIMATION_INTERPOLATOR); mProgressAnimator.addUpdateListener(new ProgressUpdateListener()); mIndeterminateStartAnimator.setFloatValues(360f); mIndeterminateStartAnimator.setRepeatMode(ValueAnimator.RESTART); mIndeterminateStartAnimator.setRepeatCount(ValueAnimator.INFINITE); - mIndeterminateStartAnimator.setInterpolator(new LinearInterpolator()); + mIndeterminateStartAnimator.setInterpolator(DEFAULT_START_ANIMATION_INTERPOLATOR); mIndeterminateStartAnimator.addUpdateListener(new StartUpdateListener()); mIndeterminateSweepAnimator.setFloatValues(360f - mIndeterminateMinimumAngle * 2f); - mIndeterminateSweepAnimator.setInterpolator(new DecelerateInterpolator()); + mIndeterminateSweepAnimator.setInterpolator(DEFAULT_SWEEP_ANIMATION_INTERPOLATOR); mIndeterminateSweepAnimator.addUpdateListener(new SweepUpdateListener()); mIndeterminateSweepAnimator.addListener(new SweepAnimatorListener()); }