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

如何在Flutter中使用RRect或类似方式绘制梯形图形?

在Flutter中绘制梯形图形

要绘制目标梯形,你需要替换原来的RRect实现,改用Path自定义多边形形状(支持圆角)。以下是修改后的代码:

@override
void paint(Canvas canvas, Offset offset, ImageConfiguration cfg) {
  // 梯形参数,可根据需求调整
  final double topWidth = 30;    // 梯形上底宽度
  final double bottomWidth = 50; // 梯形下底宽度
  final double height = 12;      // 梯形高度
  final double cornerRadius = 4; // 底部圆角半径

  // 保持梯形位置与原椭圆一致
  final Offset center = offset + Offset(cfg.size!.width / 2, cfg.size!.height + 8);

  // 计算梯形四个顶点坐标
  final Offset topLeft = center.translate(-topWidth / 2, -height);
  final Offset topRight = center.translate(topWidth / 2, -height);
  final Offset bottomRight = center.translate(bottomWidth / 2, 0);
  final Offset bottomLeft = center.translate(-bottomWidth / 2, 0);

  // 构建梯形路径(带底部圆角)
  final Path trapezoidPath = Path()
    ..moveTo(topLeft.dx, topLeft.dy)
    ..lineTo(topRight.dx, topRight.dy)
    // 右下角圆角
    ..arcToPoint(
      bottomRight,
      radius: Radius.circular(cornerRadius),
      clockwise: true,
    )
    ..lineTo(bottomLeft.dx, bottomLeft.dy)
    // 左下角圆角
    ..arcToPoint(
      topLeft,
      radius: Radius.circular(cornerRadius),
      clockwise: false,
    )
    ..close();

  canvas.drawPath(trapezoidPath, _paint);
}

代码说明:

  • 通过Path手动构建梯形轮廓,可自由调整上底、下底宽度和高度。
  • 底部两个角用arcToPoint添加圆角,若不需要圆角,直接替换为lineTo(bottomRight)和lineTo(topLeft)即可。
  • 保留原代码的位置计算逻辑,确保梯形和之前的椭圆位置对齐。

内容的提问来源于stack exchange,提问作者Abdul azeez VP

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 07:45:24