您的位置:首页 > 理论基础 > 计算机网络

https://github.com/tigerjj/ExpandedCircleProgressView

2016-11-10 14:22 363 查看
public class CircleProgressView extends TextView {

// ================== CircleProgressView ==================

public CircleProgressView(Context context, AttributeSet attrs) {
super(context, attrs);
initPaints(context);
setTextSize(20);
setTextColor(Color.WHITE);
setGravity(Gravity.CENTER);
}

// ================== fields ==================

private final RectF strokeRect = new RectF();
private final Paint strokePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
private final RectF innerCircleRect = new RectF();
private final Paint innerCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
private final float strokeWidth = 4;
private final float innerDistance = 50;
private float progress;

// ================== fields ==================

private void initPaints(Context context) {
int color = ContextCompat.getColor(context, R.color.md_light_blue_100);
strokePaint.setStyle(Paint.Style.STROKE);
strokePaint.setStrokeWidth(strokeWidth);
strokePaint.setColor(color);
innerCirclePaint.setStyle(Paint.Style.FILL);
innerCirclePaint.setColor(color);
}

// ====================== onSizeChanged ======================

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
updateStrokeRect();
updateInnerCircleRect();
}

private void updateStrokeRect() {
float halfStroke = strokeWidth / 2f;
strokeRect.set(halfStroke, halfStroke, getWidth() - halfStroke, getHeight() - halfStroke);
}

private void updateInnerCircleRect() {
float innerCircleMaxWidth = getWidth() - innerDistance * 2f;
float maxRadius = innerCircleMaxWidth / 2f;
float radius = (progress / 100f) * maxRadius;
float centerX = getWidth() / 2f;
innerCircleRect.set(centerX - radius, centerX - radius, centerX + radius, centerX + radius);
}

// ====================== onDraw ======================

@Override
protected void onDraw(Canvas canvas) {
canvas.drawOval(strokeRect, strokePaint);
canvas.drawOval(innerCircleRect, innerCirclePaint);
super.onDraw(canvas);
}

// ====================== setProgress ======================

public void setProgress(float progress) {
this.progress = progress;
updateText();
updateInnerCircleRect();
invalidate();
}

private void updateText() {
String text = progress + "";
int index = text.indexOf(".");
text = text.substring(0, index + 2) + "%";
setText(text);
}

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: