基本信息
源码名称:环形进度条(动态显示运动步数)
源码大小:8.56M
文件格式:.zip
开发语言:Java
更新时间:2021-01-18
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 5 元 
   源码介绍

使用自定义view画圆形进度条,设置目标值,输入当前值,根据值的不同计算出在圆内,超过圆的效果。

调用时,使用动画。



        //将起点转向12点钟位置
        int startAngle = -90;
        //求角度
        float angle = (float) ((mCurrent * 1.0 / mTarget) * 360);
        if (angle <= 360) {//没有超过一圈
            //阈值
            float threshold = 350f;
            if (angle <= threshold) {//在350度内,不用做特殊处理
                paint.setColor(mCircleColor);
                paint.setShader(null);
                canvas.drawArc(oval, startAngle, angle, false, paint);
            } else {//超过阈值部分
                //应该使用渐变先画出背景圆
                SweepGradient sweepGradient = new SweepGradient(mCircleWidth / 2, mCircleWidth / 2, mColors, null);
                Matrix matrix = new Matrix();
                matrix.setRotate(-95, mCircleWidth / 2, mCircleWidth / 2);
                sweepGradient.setLocalMatrix(matrix);
                paint.setShader(sweepGradient);
                canvas.drawArc(oval, startAngle, threshold, false, paint);
                //然后再补上丢失的圆角
                if (angle > threshold) {
                    float newAngle = angle - threshold;
                    paint.setColor(mCircleColor);
                    paint.setShader(null);
                    canvas.drawArc(oval, startAngle   threshold, newAngle, false, paint);
                }
            }
        } else {//已经超过一圈了,使用渐变色即可
            //看看超出多少度
            float newAngle = angle % 360;
            //填充开头颜色
            paint.setColor(mColors[0]);
            paint.setShader(null);
            //因为偏移了 90°,然后需要再多出 10° 的子弹头,后面 10是因为只移动了350度,如果移动360就会出现重叠
            canvas.drawArc(oval, -90 - 10   10   newAngle, 10, false, paint);
//            //设置渐变色
            SweepGradient sweepGradient = new SweepGradient(mCircleWidth / 2, mCircleWidth / 2, mColors, null);
            Matrix matrix = new Matrix();
            matrix.setRotate(newAngle - 95   10, mCircleWidth / 2, mCircleWidth / 2);
            sweepGradient.setLocalMatrix(matrix);
            paint.setShader(sweepGradient);
            canvas.drawArc(oval, newAngle - 90   10, 350, false, paint);
        }