我知道你可以用简单的方法在Jetpack、Compose和Canvas上画一个圆圈.我试着画了一个彩色的圆圈和另一个较小的白色圆圈来实现一个环,但似乎不正确.如果背景不是白色的,或者环的形状应该画在其他东西上,而它的内部需要真正的中空,怎么办?

Surface {
        Canvas(
            modifier = Modifier.size(200.dp),
            onDraw = {
                drawCircle(
                    color = Color.Blue,
                    radius = 200f
                )
                drawCircle(
                    color = Color.White,
                    radius = 150f
                )
            }
        )
    }

fake ring

推荐答案

可以将样式设置为Stroke以绘制非填充形状.

enter image description here

@Preview
@Composable
private fun RingSample() {

    Canvas(
        modifier = Modifier.size(200.dp),
        onDraw = {

            val strokeWidth = 50f
            drawCircle(
                color = Color.Blue,
                radius = 200f,
                style = Stroke(
                    width = strokeWidth
                )
            )

        }
    )
}

Android相关问答推荐

编写Landscape BoxWithRequests具有错误的高度.(aspectRatio matchHeight约束第一次未按预期工作)

如何使用Gradle风味在两个Kotlin导入(Google vs Amazon Java billing library)之间进行 Select ?

如何处理谷歌未经证实的应用程序拒绝?

如何消除脚手架和顶杆(material 3)更改 colored颜色 时的延迟?

无法将非静态方法与Frida挂钩

如何修复Google Play市场中有关已删除广告库的错误消息?

为什么 Android Compose 将片段作为参数传递给 Composables 函数?

从不可组合回调打开可组合屏幕

Android WebView 不会在滚动端加载新内容

DatePickerDialog (Android/Kotlin) 的两个问题

如何用jetpack compose实现垂直李克特量表

如何添加到先前预填充的 Room 数据库?

Jetpack Compose 部分或开放侧边框

我该怎么做文本计时器

组成不重叠的元素

Jetpack 组合千位分隔符视觉转换,也适用于小数

如何在jetpack compose中通过lamda返回columnScope/RowScope

Jetpack Compose - 每次点击按钮都不起作用

Android WebView 没有在第一次页面完成时从本地存储读取数据?

在使用 Retrofit 和 Room 时,我是否需要提及协程调度程序?