Compose彩色环形进度条实现(Kotlin)

代码

刚刚接触Compose,想把项目迁移一下,这个环形进度条查了好多地方都没找到合适的,自己研究了半天搞了一个,上代码:

/**
 * 环形进度条描绘
 * @param boxWithDp 控件大小
 * @param process 进度所占角度大小
 */
@Composable
fun DrawColorRing(boxWithDp:Dp,process: Float) {
    Box(
        modifier = Modifier.size(boxWithDp+30.dp),
        contentAlignment = Alignment.Center
    ) {
        Canvas(modifier = Modifier.size(boxWithDp)) {
            //背景
            drawArc(
                Color.White,
                startAngle = 270f,
                sweepAngle = 360f,
                useCenter = false,
                style = Stroke(80f, cap = StrokeCap.Round),
            )
            drawArc(
                brush = Brush.sweepGradient(listOf(Color.Blue, Color.Green, Color.Blue), Offset(300.dp.toPx() / 2f, 300.dp.toPx() / 2f)),
                startAngle = 270f,
                sweepAngle = process,
                useCenter = false,
                style = Stroke(
                    width = 81f,
                    cap = StrokeCap.Round
                )
            )
        }
    }
}

预览及预览效果:

@Preview
@Composable
fun DrawColorRingView()
{
    DrawColorRing(300.dp,240f)
}

预览效果

可调整属性:

  • 可以自定义是否有背景,不需要背景可以删除第一个drawArc
  • 可以调整背景颜色,我用的是 Color.White,可以换成别的颜色,也可以换成brush进行自定义
  • 可以调整环形进度条的颜色,调整第二个drawArc的brush中的list的颜色进行颜色变换,通过offset来调整各种颜色的占比
  • 可以调整圆环整体大小,通过调整传入的boxWithDp这个参数就可以调整控件的宽度,这里可以进一步封装,只传入progress参数
  • 可以调整环的宽度,通过调整drawArc中的style中的width可以调整环的宽度,有背景的话两个都需要调
  • 可以调整进度的前进方向,如果顺时针则progress传入正数,逆时针则是传入负数,同样可以进一步封装
  • 可以调整进度的起始位置,可以看到270度时进度条从最上面开始,可以根据需求自行调整角度
  • 可以调整环的末端是否为圆角,调整drawArc中的style中的cap参数即可

补充:

写的匆忙,有很多细节没有注意到, 欢迎大家提出更好的想法!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值