Flutter:教你用CustomPaint画一个自定义的CircleProgressBar

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

final angle = 360.0 * progress;
final double radians = degToRad(angle);
final Rect arcRect = Rect.fromCircle(center: offsetCenter, radius: drawRadius);
final progressPaint = Paint()
…style = PaintingStyle.stroke
…strokeWidth = progressWidth;
canvas.drawArc(arcRect, 0.0, degToRad(angle), false, progressPaint);

假设当前进度为progress(范围为0.0~1.0),那么当前角度为angle = 360.0 * progress,当前弧度为radians = degToRad(angle),上述代码可以绘制出一个基础的圆弧。但是我们会发现,圆弧的两端是平的,很影响美观,这时候就需要用到paintstrokeCap属性了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们将paint设置为StrokeCap.round,就能得到一个最基本的进度条了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

接下来我们给进度条添加颜色,按照设计稿,我们需要添加一个渐变色。渐变色可以通过paintshader属性来实现:

final Gradient gradient = new SweepGradient(
endAngle: radians,
colors: [
Colors.white,
currentDotColor,
],
);
final progressPaint = Paint()
…style = PaintingStyle.stroke
…strokeCap = StrokeCap.round
…strokeWidth = progressWidth
…shader = gradient.createShader(arcRect);

Flutter提供了三种基础的用来绘制渐变效果的类:SweepGradient(扫描渐变)、LinearGradient(线性渐变)和RadialGradient(径向渐变)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

很明显,我们需要用到的是SweepGradient

final Gradient gradient = new SweepGradient(
endAngle: radians,
colors: [
Colors.white,
currentDotColor,
],
);

注意,这里有一个很大的坑,我们可以从上面的SweepGradient事例图上看到,默认情况下是从90°的地方作为起点的,这跟我们的要求明显是不符的。SweepGradient有一个startAngle属性,那么我们是否可以将其设

  • 23
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值