自定义View实现进度圆环

来源:互联网 发布:三星s4支持3g网络吗 编辑:程序博客网 时间:2024/05/29 03:18
//CircleProgressView实现进度圆环的封装类

package com.bwei.view;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.text.TextUtils;import android.util.AttributeSet;import android.view.View;public class CircleProgressView extends View {    private static final String TAG = "CircleProgressBar";    private int mMaxProgress = 100;    private int mProgress = 0;    private final int mCircleLineStrokeWidth = 8;    private final int mTxtStrokeWidth = 2;    // 画圆所在的距形区域    private final RectF mRectF;    private final Paint mPaint;    private final Context mContext;    private String mTxtHint1;    private String mTxtHint2;    public CircleProgressView(Context context, AttributeSet attrs) {        super(context, attrs);        mContext = context;        mRectF = new RectF();        mPaint = new Paint();    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        int width = this.getWidth();        int height = this.getHeight();        if (width != height) {            int min = Math.min(width, height);            width = min;            height = min;        }        // 设置画笔相关属性        mPaint.setAntiAlias(true);        mPaint.setColor(Color.rgb(0xe9, 0xe9, 0xe9));        canvas.drawColor(Color.TRANSPARENT);        mPaint.setStrokeWidth(mCircleLineStrokeWidth);        mPaint.setStyle(Paint.Style.STROKE);        // 位置        mRectF.left = mCircleLineStrokeWidth / 2; // 左上角x        mRectF.top = mCircleLineStrokeWidth / 2; // 左上角y        mRectF.right = width - mCircleLineStrokeWidth / 2; // 左下角x        mRectF.bottom = height - mCircleLineStrokeWidth / 2; // 右下角y        // 绘制圆圈,进度条背景        canvas.drawArc(mRectF, -90, 360, false, mPaint);        mPaint.setColor(Color.rgb(0xf8, 0x60, 0x30));        canvas.drawArc(mRectF, -90, ((float) mProgress / mMaxProgress) * 360, false, mPaint);        // 绘制进度文案显示        mPaint.setStrokeWidth(mTxtStrokeWidth);        String text = mProgress + "%";        int textHeight = height / 4;        mPaint.setTextSize(textHeight);        int textWidth = (int) mPaint.measureText(text, 0, text.length());        mPaint.setStyle(Paint.Style.FILL);        canvas.drawText(text, width / 2 - textWidth / 2, height / 2 + textHeight / 2, mPaint);        if (!TextUtils.isEmpty(mTxtHint1)) {            mPaint.setStrokeWidth(mTxtStrokeWidth);            text = mTxtHint1;            textHeight = height / 8;            mPaint.setTextSize(textHeight);            mPaint.setColor(Color.rgb(0x99, 0x99, 0x99));            textWidth = (int) mPaint.measureText(text, 0, text.length());            mPaint.setStyle(Paint.Style.FILL);            canvas.drawText(text, width / 2 - textWidth / 2, height / 4 + textHeight / 2, mPaint);        }        if (!TextUtils.isEmpty(mTxtHint2)) {            mPaint.setStrokeWidth(mTxtStrokeWidth);            text = mTxtHint2;            textHeight = height / 8;            mPaint.setTextSize(textHeight);            textWidth = (int) mPaint.measureText(text, 0, text.length());            mPaint.setStyle(Paint.Style.FILL);            canvas.drawText(text, width / 2 - textWidth / 2, 3 * height / 4 + textHeight / 2, mPaint);        }    }    public int getMaxProgress() {        return mMaxProgress;    }    public void setMaxProgress(int maxProgress) {        this.mMaxProgress = maxProgress;    }    public void setProgress(int progress) {        this.mProgress = progress;        this.invalidate();    }    public void setProgressNotInUiThread(int progress) {        this.mProgress = progress;        this.postInvalidate();    }    public String getmTxtHint1() {        return mTxtHint1;    }    public void setmTxtHint1(String mTxtHint1) {        this.mTxtHint1 = mTxtHint1;    }    public String getmTxtHint2() {        return mTxtHint2;    }    public void setmTxtHint2(String mTxtHint2) {        this.mTxtHint2 = mTxtHint2;    }}
//主要实现自动++到100%
private void initViews() {    mCircleBar = (CircleProgressView) findViewById(R.id.circleProgressbar);    count = 0;    mCircleBar.setProgress(count);    final Timer timer = new Timer();    timer.schedule(new TimerTask() {        @Override        public void run() {            handler.post(new Runnable() {                @Override                public void run() {                    mCircleBar.setProgress(count);                    if (count == 100) {                        Intent intent2 = new Intent(MainActivity.this, UsersActivity.class);                        startActivity(intent2);                        timer.cancel();                    }                    count++;                }            });        }    }, 1000, 20);}

 
原创粉丝点击