Android 自定义环形进度条

本文详细介绍了一种自定义环形进度条的实现方法,通过继承原生View并利用Canvas进行绘制,实现了颜色渐变及旋转效果。文章分享了如何初始化画笔、设置圆弧属性及使用SweepGradient实现渐变色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先上效果图吧

 

 

 上面的进度条,开始做的时候找了几个不太一样.

然后就自己做了一个修改,继承原生View自己画的

 

初始化圆的半径和圆心点坐标

 @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int height = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec);
        int width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);
        int min = Math.min(width - getPaddingLeft() - getPaddingRight(), height - getPaddingTop() - getPaddingBottom());
        setMeasuredDimension(width, height);
        mColorWheelRadius = (min - pressExtraStrokeWidth) / 2;//计算环形进度的半径
        centerX = (width - getPaddingLeft() - getPaddingRight()) / 2 + getPaddingLeft();//计算圆心点的坐标
        centerY = (height - getPaddingTop() - getPaddingBottom()) / 2 + getPaddingTop();
        mColorWheelRectangle.set(centerX - mColorWheelRadius, centerY - mColorWheelRadius, centerX + mColorWheelRadius, centerY + mColorWheelRadius);

    }

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 

 

初始化画笔

    private void init() {

        //默认圆弧
        mNormalRingPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mNormalRingPaint.setColor(Color.parseColor("#EFEFEF"));
        mNormalRingPaint.setStrokeWidth(pressExtraStrokeWidth);
        mNormalRingPaint.setStyle(Paint.Style.STROKE);
        //开启显示边缘为圆形
        mNormalRingPaint.setStrokeCap(Paint.Cap.ROUND);

        //进度圆环
        mProgressPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mProgressPaint.setStrokeCap(Paint.Cap.ROUND);
        mProgressPaint.setStyle(Paint.Style.STROKE);
        mProgressPaint.setColor(Color.RED);
        mProgressPaint.setStrokeWidth(pressExtraStrokeWidth);
       
    }

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

最后就是我们的ondraw方法了

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawArc(mColorWheelRectangle, 120, 300, false, mNormalRingPaint);
//颜色渐变
        SweepGradient sweepGradient = new SweepGradient(centerX, centerY, new int[]{Color.parseColor("#3BA6FC"), Color.parseColor("#6eddff")}, new
                float[]{0f, 0.83f});


        mProgressPaint.setShader(sweepGradient);
//画出来后旋转画布
        canvas.rotate(118, centerX, centerY);
        canvas.drawArc(mColorWheelRectangle, 2, getCurrentprogress(), false, mProgressPaint);

    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值