Skip to content

Commit

Permalink
Merge pull request #6 from Gansgar/master
Browse files Browse the repository at this point in the history
Allowing for custom animations
  • Loading branch information
yuriy-budiyev authored Dec 16, 2018
2 parents 178e800 + c67ff5f commit a770e86
Showing 1 changed file with 67 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
package com.budiyev.android.circularprogressbar;

import android.animation.Animator;
import android.animation.TimeInterpolator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.TypedArray;
Expand Down Expand Up @@ -67,6 +68,10 @@ 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_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();
private final ValueAnimator mProgressAnimator = new ValueAnimator();
Expand Down Expand Up @@ -131,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 All @@ -154,6 +199,25 @@ public void setProgress(final float progress) {
}
}

/**
* Set the current animation interpolator
*/
public void setProgressInterpolator(final TimeInterpolator interpolator) {
if (mVisible) {
if (mProgressAnimator.isRunning()) {
mProgressAnimator.end();
}
}
mProgressAnimator.setInterpolator(interpolator == null ? DEFAULT_PROGRESS_ANIMATION_INTERPOLATOR : interpolator);
}

/**
* Returns progress animator used to animate setting the progress
*/
public TimeInterpolator getProgressInterpolator() {
return mProgressAnimator.getInterpolator();
}

/**
* Maximum progress for non-indeterminate mode
*/
Expand Down Expand Up @@ -600,15 +664,15 @@ private void initialize(@NonNull final Context context, @Nullable final Attribut
}
}
}
mProgressAnimator.setInterpolator(new DecelerateInterpolator());
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 a770e86

Please sign in to comment.