package carbon.drawable;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.Interpolator;
import carbon.widget.ProgressBar;
/**
* Created by Mbarin on 2015-02-08.
*/
public class CircularProgressDrawable extends ProgressDrawable {
private static final long DEFAULT_SWEEP_DURATION = 3000;
private static final long DEFAULT_ANGLE_DURATION = 1000;
private long sweepDuration = DEFAULT_SWEEP_DURATION;
private long angleDuration = DEFAULT_ANGLE_DURATION;
Interpolator interpolator2 = new DecelerateInterpolator();
Interpolator interpolator = new AccelerateDecelerateInterpolator();
public CircularProgressDrawable() {
forePaint.setStyle(Paint.Style.STROKE);
forePaint.setColor(Color.WHITE);
}
@Override
public void draw(Canvas canvas) {
Rect bounds = getBounds();
forePaint.setStrokeWidth(width);
RectF boundsF = new RectF(bounds);
boundsF.inset(width / 2 + barPadding + 0.1f, width / 2 + barPadding + 0.1f);
if (style != ProgressBar.Style.CircularDeterminate) {
long time = System.currentTimeMillis() - startTime;
float t = (float) (time % angleDuration) / angleDuration;
float t2 = (float) (time % sweepDuration) / sweepDuration;
float bar = Math.min((t - t2 + 1) % 1, (t2 - t + 1) % 1);
bar = interpolator.getInterpolation(bar) * 2 * 300 + 30;
canvas.drawArc(boundsF, (t * 360 - bar / 2 + 360) % 360, bar, false, forePaint);
} else {
long time = System.currentTimeMillis() - startTime;
float t = Math.min((float) time / angleDuration, 1);
canvas.drawArc(boundsF, interpolator2.getInterpolation(t) * 360 - 90, progress * 360, false, forePaint);
}
invalidateSelf();
}
}