Skip to content

Commit

Permalink
Add custom indetermined sweep and start animations
Browse files Browse the repository at this point in the history
  • Loading branch information
gansgar committed Dec 16, 2018
1 parent e74e8a9 commit c67ff5f
Showing 1 changed file with 54 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -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
*/
Expand Down Expand Up @@ -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();
}

/**
Expand Down Expand Up @@ -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());
}
Expand Down

0 comments on commit c67ff5f

Please sign in to comment.