圆形进度条

public class CircleProgress extends View {
    private final static String TAG="Circleprogress";
    private int mHeight;
    private int mWidth;
    private int mOrbitWidth;
    private int mTextSize;
    private boolean mEnableText;
    private int mColorProgress;
    private int mColorOrbit;
    private int mColorText;
    private int mMaxProgress;
    private int mProgress;
    private Paint mPaint;
    private int mRadius;
    private int max = 100;
    public static String getTAG() {
        return TAG;
    }

    public int getmHeight() {
        return mHeight;
    }

    public void setmHeight(int mHeight) {
        this.mHeight = mHeight;
    }

    public int getmWidth() {
        return mWidth;
    }

    public void setmWidth(int mWidth) {
        this.mWidth = mWidth;
    }

    public int getmOrbitWidth() {
        return mOrbitWidth;
    }

    public void setmOrbitWidth(int mOrbitWidth) {
        this.mOrbitWidth = mOrbitWidth;
    }

    public int getmTextSize() {
        return mTextSize;
    }

    public void setmTextSize(int mTextSize) {
        this.mTextSize = mTextSize;
    }

    public boolean ismEnableText() {
        return mEnableText;
    }

    public void setmEnableText(boolean mEnableText) {
        this.mEnableText = mEnableText;
    }

    public int getmColorProgress() {
        return mColorProgress;
    }

    public void setmColorProgress(int mColorProgress) {
        this.mColorProgress = mColorProgress;
    }

    public int getmColorOrbit() {
        return mColorOrbit;
    }

    public void setmColorOrbit(int mColorOrbit) {
        this.mColorOrbit = mColorOrbit;
    }

    public int getmColorText() {
        return mColorText;
    }

    public void setmColorText(int mColorText) {
        this.mColorText = mColorText;
    }

    public int getmMaxProgress() {
        return mMaxProgress;
    }

    public void setmMaxProgress(int mMaxProgress) {
        this.mMaxProgress = mMaxProgress;
    }

    public int getmProgress() {
        return mProgress;
    }

    public void setmProgress(int mProgress) {
        this.mProgress = mProgress;
    }

    public Paint getmPaint() {
        return mPaint;
    }

    public void setmPaint(Paint mPaint) {
        this.mPaint = mPaint;
    }

    public int getmRadius() {
        return mRadius;
    }

    public void setmRadius(int mRadius) {
        this.mRadius = mRadius;
    }

    public CircleProgress(Context context) {
        this(context,null);
    }

    public CircleProgress(Context context,  AttributeSet attrs) {
        this(context, attrs,-1);
    }

    public CircleProgress(Context context,  AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CircleProgress, defStyleAttr, 0);
        mOrbitWidth = typedArray.getDimensionPixelSize(R.styleable.CircleProgress_orbitWidth,20);
        mTextSize = typedArray.getDimensionPixelSize(R.styleable.CircleProgress_textSize,20);
        mEnableText = typedArray.getBoolean(R.styleable.CircleProgress_enableText, true);
        int colorAccent = ContextCompat.getColor(context, R.color.colorAccent);
         int defaultOrbitColor = ContextCompat.getColor(context,R.color.colorPrimary);
        mColorProgress = typedArray.getColor(R.styleable.CircleProgress_progressColor, colorAccent);
        mColorOrbit = typedArray.getColor(R.styleable.CircleProgress_orbitColor, defaultOrbitColor);
        mColorText = typedArray.getColor(R.styleable.CircleProgress_textColor, colorAccent);
        mMaxProgress = typedArray.getInt(R.styleable.CircleProgress_maxProgress, 100);
        mProgress = typedArray.getInt(R.styleable.CircleProgress_progress, 0);
        typedArray.recycle();

        mPaint = new Paint();

    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (mWidth>mHeight){
            mRadius = mHeight/2-mOrbitWidth;
        }else {
            mRadius = mWidth/2-mOrbitWidth;
        }
        int cx = getWidth()/2;
        int cy = getHeight()/2;

        //画进度条轨道
        mPaint.setColor(mColorOrbit); //设置圆的颜色
        mPaint.setStyle(Paint.Style.STROKE); //设置空心
        mPaint.setStrokeWidth(mOrbitWidth); //设置圆的宽度
        mPaint.setAntiAlias(true);  //消除锯齿
        canvas.drawCircle(cx, cy, mRadius, mPaint); //画出圆

        //画进度(圆弧)
        mPaint.setColor(mColorProgress);  //设置进度的颜色
        RectF oval = new RectF(cx-mRadius,cy-mRadius,cx+mRadius,cy+mRadius);
        canvas.drawArc(oval, -90, 360 * (mProgress*1f / mMaxProgress), false, mPaint);  //根据进度画圆弧

        //画圆环内百分比文字
        if (mEnableText) {
            Rect rect = new Rect();
            mPaint.setColor(mColorText);
            mPaint.setTextSize(mTextSize);
            mPaint.setStrokeWidth(0);
            String progressText = getProgressText();
            mPaint.getTextBounds(progressText, 0, progressText.length(), rect);
            Paint.FontMetricsInt fontMetrics = mPaint.getFontMetricsInt();
            int baseline = (mHeight - fontMetrics.bottom + fontMetrics.top) / 2 - fontMetrics.top;
            canvas.drawText(progressText, mHeight / 2 - rect.width() / 2, baseline, mPaint);
        }
    }

    public void setProgress(int progress){

            mProgress = progress;
        invalidate();
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        mHeight = getMeasuredHeight();
        mWidth = getMeasuredWidth();

    }

    public String getProgressText() {
        return (int)(100*(mProgress * 1f / mMaxProgress) )+ "%";
    }


}

<com.bw.fengye.bolangxian.CircleProgress
        android:layout_width="200dp"
        android:layout_height="200dp" />
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值