Jetpack Compose饼图方块图标象限定位问题求助
解决Jetpack Compose饼图标签(方块)的位置偏移问题
核心问题是不同象限的方块需要以不同锚点对齐到圆弧中点,你当前固定用topLeft作为锚点仅适配0-90度象限,其他象限需根据角度调整偏移量:
- 保留你已计算好的圆心到方块锚点的
offset位置 - 根据角度所在象限,调整方块的
topLeft坐标,让对应边/角对齐到offset:- 0°-90°:方块左上角对齐
offset(保持原逻辑) - 90°-180°:方块右上角对齐
offset→topLeft需减去方块宽度 - 180°-270°:方块右下角对齐
offset→topLeft减去宽度和高度 - 270°-360°:方块左下角对齐
offset→topLeft减去高度
- 0°-90°:方块左上角对齐
修改后的代码如下:
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
相关产品推荐
相关产品推荐

