自定义进度弧形条

来源:互联网 发布:手机注册淘宝店铺 编辑:程序博客网 时间:2024/06/11 05:18
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")@Overrideprotected 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);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {// TODO Auto-generated method stubmeasuredHeight = measure(heightMeasureSpec);measuredWidth = measure(widthMeasureSpec);setMeasuredDimension(measuredWidth, measuredHeight);}private int measure(int measureSpec) {// TODO Auto-generated method stubint 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;}

0 0
原创粉丝点击