package in.srain.cube.image.drawable; import android.graphics.*; import android.graphics.drawable.Drawable; import android.text.TextPaint; import android.text.TextUtils; import in.srain.cube.util.CLog; /** * Created by bruce on 11/4/14. */ public class CircleProgress extends Drawable { private String prefixText = ""; private String suffixText = "%"; private Paint mTextPaint; private RectF rectF = new RectF(); private float mTextSize; private int textColor = Color.WHITE; private int progress = 0; private int mMax = 100; private int mFinishedColor = Color.rgb(66, 145, 241); private int mUnfinishedColor = Color.rgb(204, 204, 204); private Paint mPaint = new Paint(); private int mSize; public CircleProgress(int textSize) { this.mTextSize = textSize; mTextPaint = new TextPaint(); mTextPaint.setAntiAlias(true); mPaint.setAntiAlias(true); setPainters(); } public void setSize(int size) { mSize = size; } public void setPainters() { mTextPaint.setColor(textColor); mTextPaint.setTextSize(mTextSize); } public int getProgress() { return progress; } @SuppressWarnings("unuesd") public void setProgress(int progress) { this.progress = progress; if (this.progress > getMax()) { this.progress %= getMax(); } setPainters(); } public int getMax() { return mMax; } public void setMax(int max) { if (max > 0 && this.mMax != max) { this.mMax = max; setPainters(); } } public float getTextSize() { return mTextSize; } public void setTextSize(float textSize) { if (textSize != this.mTextSize) { this.mTextSize = textSize; this.setPainters(); } } public int getTextColor() { return textColor; } public void setTextColor(int textColor) { if (this.textColor != textColor) { this.textColor = textColor; this.setPainters(); } } public int getFinishedColor() { return mFinishedColor; } public void setFinishedColor(int finishedColor) { if (this.mFinishedColor != finishedColor) { this.mFinishedColor = finishedColor; this.setPainters(); } } public int getUnfinishedColor() { return mUnfinishedColor; } public void setUnfinishedColor(int unfinishedColor) { this.mUnfinishedColor = unfinishedColor; this.setPainters(); } public String getPrefixText() { return prefixText; } public void setPrefixText(String prefixText) { this.prefixText = prefixText; this.setPainters(); } public String getSuffixText() { return suffixText; } public void setSuffixText(String suffixText) { this.suffixText = suffixText; this.setPainters(); } public String getDrawText() { return getPrefixText() + getProgress() + getSuffixText(); } public float getProgressPercentage() { return getProgress() / (float) getMax(); } @Override public void draw(Canvas canvas) { CLog.d("test", "draw"); float yHeight = getProgress() / (float) getMax() * mSize; float radius = mSize / 2f; float angle = (float) (Math.acos((radius - yHeight) / radius) * 180 / Math.PI); float startAngle = 90 + angle; float sweepAngle = 360 - angle * 2; mPaint.setColor(getUnfinishedColor()); canvas.drawArc(rectF, startAngle, sweepAngle, false, mPaint); canvas.save(); canvas.rotate(180, mSize / 2, mSize / 2); mPaint.setColor(getFinishedColor()); canvas.drawArc(rectF, 270 - angle, angle * 2, false, mPaint); canvas.restore(); String text = getDrawText(); if (!TextUtils.isEmpty(text)) { float textHeight = mTextPaint.descent() + mTextPaint.ascent(); canvas.drawText(text, (mSize - mTextPaint.measureText(text)) / 2.0f, (mSize - textHeight) / 2.0f, mTextPaint); } } @Override public void setAlpha(int i) { mTextPaint.setAlpha(i); mPaint.setAlpha(i); } @Override public void setColorFilter(ColorFilter colorFilter) { mTextPaint.setColorFilter(colorFilter); mPaint.setColorFilter(colorFilter); } @Override public int getOpacity() { return PixelFormat.TRANSLUCENT; } }