我有一个Pomodoro应用程序,并想使用这个圆形.该形状会随时间值而变化.外面的圆点并不重要,我希望在我的应用程序上有一个内部和圆形的形状.我使用了Jetpack Compose和DrawArc和Canvas,但无法实现.

我想要这样的东西:

circle design

以下是我的代码:

Canvas(modifier.offset(y = 10.dp)) {
    drawArc(
        color = inactiveBarColor,
        startAngle = 90f,      
        sweepAngle = 90f,       
        useCenter = false,
        size = Size(size.width.toFloat(), size.height.toFloat()),
        style = Stroke(strokeWidth.toPx(), cap = StrokeCap.Round)
   )
   drawArc(
        color = activeBarColor,
        startAngle = 0f,      
        sweepAngle = 90f,
        useCenter = false,
        size = Size(size.width.toFloat(), size.height.toFloat()),
        style = Stroke(strokeWidth.toPx(), cap = StrokeCap.Round)
   )
}

Angular 的值是随机的,仅用于演示

推荐答案

你可以这样画.通过更改值,您可以构建精确的时钟形状.并且您需要在代码中将扫描Angular 从时间转换为Angular .

enter image description here

 @Preview
@Composable
private fun ClockArcSample() {
    Column {

        var sweepAngle by remember {
            mutableStateOf(90f)
        }

        Canvas(
            modifier = Modifier
                .fillMaxWidth()
                .background(Color.Red)
                .aspectRatio(1f)
        ) {
            val canvasWidth = size.width
            val arcDiameter = canvasWidth * .55f

            drawCircle(
                color = Color.White,
                style = Stroke(canvasWidth * 0.04f),
                radius = canvasWidth * .35f
            )

            drawArc(
                color = Color.White,
                270f,
                sweepAngle,
                true,
                topLeft = Offset((canvasWidth - arcDiameter) / 2, (canvasWidth - arcDiameter) / 2),
                size = Size(arcDiameter, arcDiameter)
            )

            val strokeWidth = 2.dp.toPx()
            for (i in 0..360 step 6) {
                rotate(i.toFloat()) {
                    drawLine(
                        color = Color.White,
                        strokeWidth = strokeWidth,
                        start = Offset(
                            x = canvasWidth * 0.90f,
                            y = center.y
                        ),
                        end = Offset(
                            x = canvasWidth * 0.93f,
                            y = center.y
                        ),
                        cap = StrokeCap.Round
                    )
                }
            }
        }

        Slider(
            value = sweepAngle,
            onValueChange = { sweepAngle = it },
            valueRange = 0f..360f
        )
    }
}

Android相关问答推荐

ArrayList.remove()(Kotlin中的removeAt())导致奇怪的IndexOutOfBoundsResponse异常

Android Kotlin DSL Gradle找不到自定义存储库中的依赖项

Android Compose Lazy柱形实时UI更改

Android 14(Oneui 6)中的本地推送通知行为不一致

尽管我们不再使用GCM SDK,但应用程序已被标记为使用GCM SDK

如何将我的Android应用程序(Kotlin)中的图像分享给其他应用程序?

安卓Azure通讯聊天UI库导入?

在 Android 房间迁移中获取上下文

Jetpack compose :使用 rememberSaveable 时未应用待处理的合成

单击过go 的文章时 NewsApp 崩溃

java.lang.String 类型的值 Forbidden 无法转换为 JSONObject

Android Compose:LazyColumn 和 Column with verticalScroll 的区别

Android Compose 创建抖动动画

新的内部测试应用程序版本不适用于测试人员,即使它说它们是

在android studio中使用wifi配对设备的问题

如何处理 com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: For input string: "T1V 4Y8" Kotlin

Jetpack Compose:mutableStateOf 不随流量更新

如何在不使用 NestedScrollView 的情况下使用带有 CollapsingToolbar 的 ViewPager?

我可以在不解密的情况下使用 JSch 获取加密的 SSH 私钥的类型或 fingerprint 吗?

react-native android项目未找到错误