You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose 绘制弧形/半圆图形:drawArc起始位置与圆角设置问题

问题1:drawArc自定义起始位置

Jetpack Compose的drawArc方法默认startAngle参数的0°对应绘制边界矩形的右侧中心点,角度顺时针递增:

  • 左侧中间位置对应180°,也就是你提到的默认常用起始位置
  • 如果你需要起始点刚好落在绘制区域的左下角,可以将弧的绘制边界放大到宽高都是画布宽度的2倍,然后将startAngle设为90°,即可让弧的起点对齐画布左下角。

示例代码:

Canvas(modifier = Modifier.size(200.dp)) {
    val canvasWidth = size.width
    drawArc(
        color = Color.Blue,
        // 调整绘制边界的位置和尺寸,让弧的起点刚好对齐原画布左下角
        topLeft = Offset(-canvasWidth, -canvasWidth),
        size = Size(canvasWidth * 2, canvasWidth * 2),
        startAngle = 90f,
        sweepAngle = 90f, // 可按需调整扫过的角度
        useCenter = false,
        style = Stroke(width = 4.dp.toPx())
    )
}

如果需要更灵活的起始位置,也可以先通过translate方法平移坐标系,再执行绘制。


问题2:drawRoundRect仅设置顶部圆角

drawRoundRect方法支持通过CornerSizes参数单独配置四个角的圆角半径,不需要四个角统一设置。你只需要将左上角、右上角的半径设为你需要的数值,左下角、右下角设为0即可。

示例代码:

Canvas(modifier = Modifier.size(200.dp, 100.dp)) {
    drawRoundRect(
        color = Color.Green,
        cornerSize = CornerSizes(
            topLeft = 16.dp.toPx(),
            topRight = 16.dp.toPx(),
            bottomLeft = 0f,
            bottomRight = 0f
        )
    )
}

如果你的Compose版本较低不支持CornerSizes的单独配置,也可以先画一个普通矩形,再在顶部两个角的位置各画一个对应半径的圆形填充,或者用Path自行绘制路径实现。


内容的提问来源于stack exchange,提问作者daniel-eh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:15:03