自定义进度弧形条

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;
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值