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

Jetpack Compose饼图方块图标象限定位问题求助

解决Jetpack Compose饼图标签(方块)的位置偏移问题

核心问题是不同象限的方块需要以不同锚点对齐到圆弧中点,你当前固定用topLeft作为锚点仅适配0-90度象限,其他象限需根据角度调整偏移量:

  1. 保留你已计算好的圆心到方块锚点的offset位置
  2. 根据角度所在象限,调整方块的topLeft坐标,让对应边/角对齐到offset:
    • 0°-90°:方块左上角对齐offset(保持原逻辑)
    • 90°-180°:方块右上角对齐offset → topLeft需减去方块宽度
    • 180°-270°:方块右下角对齐offset → topLeft减去宽度和高度
    • 270°-360°:方块左下角对齐offset → topLeft减去高度

修改后的代码如下:

val angle = spendingChartItem.startAngle + spendingChartItem.archAngle / 2f
val squareSize = Size(24f, 24f)
val offset = Offset(
    drawScope.center.x + (circleInnerRadius + chartBarWidth.toPx() / 2) * cos(angle.degreeToRadians),
    drawScope.center.y + (circleInnerRadius + chartBarWidth.toPx() / 2) * sin(angle.degreeToRadians)
)

// 根据角度区间计算适配后的topLeft坐标
val adjustedTopLeft = when (angle) {
    in 0f..90f -> offset
    in 90f..180f -> Offset(offset.x - squareSize.width, offset.y)
    in 180f..270f -> Offset(offset.x - squareSize.width, offset.y - squareSize.height)
    in 270f..360f -> Offset(offset.x, offset.y - squareSize.height)
    else -> offset // 处理异常角度情况
}

drawRect(
    color = Color.Red,
    size = squareSize,
    topLeft = adjustedTopLeft
)

说明:

  • 把方块尺寸抽成变量squareSize,方便统一修改和偏移计算
  • 通过when语句匹配角度区间,动态调整topLeft,确保每个象限的方块都能正确对齐到圆弧中点

内容的提问来源于stack exchange,提问作者avram andrei tiberiu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:57:49