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
相关产品推荐
相关产品推荐

