package carbon.drawable; import android.content.res.ColorStateList; import android.graphics.Color; import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.drawable.Drawable; import android.support.annotation.NonNull; import carbon.widget.ProgressBar; public abstract class ProgressDrawable extends Drawable { private static final long DEFAULT_SWEEP_DURATION = 800; private static final long DEFAULT_SWEEP_OFFSET = 500; private long sweepDuration = DEFAULT_SWEEP_DURATION; private long sweepDelay = DEFAULT_SWEEP_OFFSET; final long startTime = System.currentTimeMillis(); Paint forePaint = new Paint(Paint.ANTI_ALIAS_FLAG); private ColorStateList tint = ColorStateList.valueOf(Color.RED); private PorterDuff.Mode tintMode; float width = 5; float progress; float barPadding; ProgressBar.Style style; @Override public void setAlpha(int alpha) { forePaint.setAlpha(alpha); } @Override public void setColorFilter(ColorFilter cf) { forePaint.setColorFilter(cf); } @Override public int getOpacity() { return PixelFormat.TRANSPARENT; } @Override public boolean setState(@NonNull int[] stateSet) { boolean result = super.setState(stateSet); return result; } public void setProgress(float progress) { this.progress = Math.max(0, Math.min(progress, 1)); } public float getProgress() { return progress; } public long getSweepDuration() { return sweepDuration; } public void setSweepDuration(long sweepDuration) { this.sweepDuration = sweepDuration; } public long getSweepDelay() { return sweepDelay; } public void setSweepDelay(long sweepDelay) { this.sweepDelay = sweepDelay; } public float getBarWidth() { return width; } public void setBarWidth(float width) { this.width = width; } public ProgressBar.Style getStyle() { return style; } public void setStyle(ProgressBar.Style style) { this.style = style; } public float getBarPadding() { return barPadding; } public void setBarPadding(float barPadding) { this.barPadding = barPadding; } public void setTint(ColorStateList list) { tint = list; updateTint(); } @Override public void setTint(int tintColor) { this.tint = ColorStateList.valueOf(tintColor); } @Override public void setTintMode(@NonNull PorterDuff.Mode tintMode) { this.tintMode = tintMode; updateTint(); } private void updateTint() { if (tint != null && tintMode != null) { int color = tint.getColorForState(getState(), tint.getDefaultColor()); setColorFilter(new PorterDuffColorFilter(color, tintMode)); setAlpha(Color.alpha(color)); } else { setColorFilter(null); setAlpha(255); } } }