public class CustomProgressBar extends View {
private int mColor;
private int mCircleWidth;
private Paint mPaint, mTextpaint1, mTextpaint2;
private int mProgress;
private boolean stop;
private int measuredHeight, measuredWidth;
public CustomProgressBar(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
mPaint = new Paint();
mTextpaint1 = new Paint();
mTextpaint2 = new Paint();
mColor = Color.RED;
mCircleWidth = 30;
// 绘图线程
new Thread() {
public void run() {
while (!stop) {
mProgress++;
postInvalidate();
if (mProgress == 270) {
stop = true;
}
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
}.start();
}
@SuppressLint("DrawAllocation")
@Override
protected void onDraw(Canvas canvas) {
// 画圆弧
int centre = getWidth()/ 2; // 获取圆心的x坐标
int radius = centre - mCircleWidth / 2;// 半径
mPaint.setStrokeWidth(mCircleWidth); // 设置圆环的宽度
mPaint.setAntiAlias(true); // 消除锯齿
mPaint.setStyle(Paint.Style.STROKE); // 设置空心
mPaint.setStrokeCap(Paint.Cap.ROUND);
RectF oval = new RectF(centre - radius, centre - radius, centre
+ radius, centre + radius); // 用于定义的圆弧的形状和大小的界限
mPaint.setColor(mColor); // 设置圆环的颜色
canvas.drawArc(oval, -90, mProgress, false, mPaint); // 根据进度画圆弧
// 写百分比
mTextpaint1.setStyle(Paint.Style.FILL);
mTextpaint1.setTextSize(150);
mTextpaint1.setColor(mColor);
String str = (int) ((mProgress * 1.0 / 360) * 100) + "%";
float txtLength = mTextpaint1.measureText(str);
canvas.drawText(str, centre - txtLength / 2, getHeight() / 3,
mTextpaint1);
// 写当前时间
Calendar c = Calendar.getInstance();
int mHour = c.get(Calendar.HOUR_OF_DAY);
int mMinut = c.get(Calendar.MINUTE);
String mMinuts;
if (mMinut < 10) {
mMinuts = "0" + mMinut;
} else {
mMinuts = mMinut + "";
}
mTextpaint2.setColor(Color.GRAY);
mTextpaint2.setTextSize(50);
String txt4 = mHour + " : " + mMinuts;
float txtLength1 = mTextpaint2.measureText(txt4);
canvas.drawText(txt4, centre - txtLength1 / 2,getHeight() / 2,
mTextpaint2);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO Auto-generated method stub
measuredHeight = measure(heightMeasureSpec);
measuredWidth = measure(widthMeasureSpec);
setMeasuredDimension(measuredWidth, measuredHeight);
}
private int measure(int measureSpec) {
// TODO Auto-generated method stub
int specMode = MeasureSpec.getMode(measureSpec);
int specSize = MeasureSpec.getSize(measureSpec);
int result = 500;
if (specMode == MeasureSpec.AT_MOST) {
result = specSize;
} else if (specMode == MeasureSpec.EXACTLY) {
result = specSize;
}
return result;
}
自定义进度弧形条
最新推荐文章于 2024-04-11 09:32:46 发布