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

如何在Jetpack Compose中绘制竖向票券形状

修复垂直票券形状的左右边缘半圆绘制问题

你的代码主要问题在于路径衔接冗余和圆弧角度参数错误,导致半圆方向不对、路径衔接异常。以下是修改后的代码:

private fun getTicketPathVertical(size: Size, density: Density): Path {
    val middleY = size.height / 2f 
    val circleRadiusInPx = with(density) { circleRadius.toPx() }
    return Path().apply {
        reset()
        // 起点定位到左上角
        moveTo(0F, 0F)
        // 绘制顶部边缘:左上角→右上角
        lineTo(size.width, 0F)
        // 从右上角到右侧半圆的上起点
        lineTo(size.width, middleY - circleRadiusInPx)
        // 绘制右侧中间的向内半圆
        arcTo(
            rect = Rect(
                left = size.width - circleRadiusInPx * 2,
                top = middleY - circleRadiusInPx,
                right = size.width,
                bottom = middleY + circleRadiusInPx
            ),
            startAngleDegrees = 270f, // 起始角度指向正上方
            sweepAngleDegrees = 180f, // 顺时针扫180度,形成向内凹陷的半圆
            forceMoveTo = false
        )
        // 从右侧半圆下起点到右下角
        lineTo(size.width, size.height)
        // 绘制底部边缘:右下角→左下角
        lineTo(0F, size.height)
        // 从左下角到左侧半圆的下起点
        lineTo(0F, middleY + circleRadiusInPx)
        // 绘制左侧中间的向内半圆
        arcTo(
            rect = Rect(
                left = 0F,
                top = middleY - circleRadiusInPx,
                right = circleRadiusInPx * 2,
                bottom = middleY + circleRadiusInPx
            ),
            startAngleDegrees = 90f, // 起始角度指向正下方
            sweepAngleDegrees = 180f, // 顺时针扫180度,形成向内凹陷的半圆
            forceMoveTo = false
        )
        // 从左侧半圆上起点回到左上角,闭合路径
        lineTo(0F, 0F)
        close() // 确保路径完全闭合,消除边缘缺口
    }
}

关键修改点:

  • 移除了重复的lineTo(x = 0F, y = size.height)调用,避免路径冗余混乱
  • 调整右侧圆弧的sweepAngleDegrees为180f(原代码-180f是逆时针绘制,会形成向外凸的圆弧),改为顺时针绘制向内凹陷的半圆
  • 修正左侧圆弧的起始衔接点:从middleY改为middleY + circleRadiusInPx,确保线条与圆弧起点精准衔接
  • 同样调整左侧圆弧的sweepAngleDegrees为180f,配合起始角度形成正确的向内半圆
  • 添加close()方法,确保路径完全闭合,避免绘制时出现边缘缺口

内容的提问来源于stack exchange,提问作者Serhat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 05:16:28