自定义的CircleProgressBar,支持自定义宽度,颜色等等。

基于Anbase框架优化了了一个自定义的CircleProgressBar,onDraw方法如下
@Override
protected void onDraw(Canvas canvas) {
   super.onDraw(canvas);
   if(reset){
      canvas.drawColor(Color.TRANSPARENT);
      reset = false;
   }
   this.width = getMeasuredWidth();
   this.height = getMeasuredHeight();
   this.radius = getMeasuredWidth()/2 - pathWidth;
   
   // 设置画笔颜色
   pathPaint.setColor(pathColor);
   // 设置画笔宽度
   pathPaint.setStrokeWidth(pathWidth);
   
   //添加浮雕效果
   pathPaint.setMaskFilter(emboss); 
   
   // 在中心的地方画个半径为r的圆
   canvas.drawCircle(this.width/2, this.height/2, radius, pathPaint);
   
   //边线
   pathPaint.setStrokeWidth(0.5f);
   pathPaint.setColor(pathBorderColor);
   canvas.drawCircle(this.width/2, this.height/2, radius+pathWidth/2+0.5f, pathPaint);
   canvas.drawCircle(this.width/2, this.height/2, radius-pathWidth/2-0.5f, pathPaint);
       
   //环形颜色填充
   SweepGradient sweepGradient = new SweepGradient(this.width/2, this.height/2, arcColors, null);
   fillArcPaint.setShader(sweepGradient);
   // 设置style 默认值中空
       fillArcPaint.setStyle(fillArcPaintStyle);
   //模糊效果
   fillArcPaint.setMaskFilter(mBlur);
   
   //设置线的类型,边是圆的
   fillArcPaint.setStrokeCap(Paint.Cap.ROUND);
   
   //fillArcPaint.setColor(Color.BLUE);
   
   fillArcPaint.setStrokeWidth(pathWidth);
   // 设置类似于左上角坐标,右下角坐标
   oval.set(this.width/2 - radius, this.height/2 - radius, this.width/2 + radius, this.height/2 + radius);
   // 画圆弧,第二个参数为:起始角度,第三个为跨的角度,第四个为true的时候是实心,false的时候为空心
   canvas.drawArc(oval, -90, ((float) progress / max) * 360, true, fillArcPaint);
   
}

具体使用如下:
// ProgressBar进度控制
mCirprogressBar1 = (CircleProgressBar) findViewById(R.id.circleProgressBar1);
mCirprogressBar1.setPathWidth(20); // 设置圆环宽度
int[] arcColors = new int[] {0xFFFFB6C1,  0xFFFFC0CB, 0xFFDC143C, 0xFFFFB6C1 };
mCirprogressBar1.setArcColors(arcColors);
mCirprogressBar1.setFillArcPaintStyle(Paint.Style.FILL_AND_STROKE);
mCirprogressBar1.setIsSolid(true);
mCirprogressBar1.setMax(max);
mCirprogressBar1.setProgress(progress);

// ProgressBar进度控制
mCirprogressBar2 = (CircleProgressBar) findViewById(R.id.circleProgressBar2);
mCirprogressBar2.setPathWidth(10); // 设置圆环宽度
mCirprogressBar2.setMax(max);
mCirprogressBar2.setProgress(progress);

// ProgressBar进度控制
mCirprogressBar3 = (CircleProgressBar) findViewById(R.id.circleProgressBar3);
mCirprogressBar3.setPathWidth(5); // 设置圆环宽度
mCirprogressBar3.setFillArcPaintStyle(Paint.Style.FILL);
mCirprogressBar3.setIsSolid(true);
mCirprogressBar3.setMax(max);
mCirprogressBar3.setProgress(progress);


参数的产生的作用看效果图就知道了,其实是一个在不停转动的,不会做gif只能截一个静态图了。想看动态效果的可以下载demo看看。
效果图如下:


demo地址
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值