flutter - 用 flutter canvas 在形状上切一个洞

标签 flutter dart flutter-canvas

如何使用 flutter canvas 在形状中“切一个洞”? 我有一组相当复杂的形状,看起来像真实世界的物体。这个物体上有一个圆角矩形的孔。

我真的很想从形状中减去 RRect,但我找不到任何关于如何执行此操作的信息。 canvas.clipRRect(myRRect) 只是删除了 myRRect 未涵盖的所有内容。我想要相反的东西。即在当前 Canvas 形状中创建一个 myRRect 形状孔。

最佳答案

您可以使用 Path.combine连同 difference创建孔的操作。

自定义画家:

class HolePainter extends CustomPainter {
  
  @override
  void paint(Canvas canvas, Size size) {
    final paint = Paint();
    paint.color = Colors.blue;
    canvas.drawPath(
        Path.combine(
          PathOperation.difference,
          Path()..addRRect(RRect.fromLTRBR(100, 100, 300, 300, Radius.circular(10))),
          Path()
            ..addOval(Rect.fromCircle(center: Offset(200, 200), radius: 50))
            ..close(),
        ),
        paint,
    );
  }

  @override
  bool shouldRepaint(CustomPainter oldDelegate) {
    return null;
  }
  
}

用法:

class EditAvatar extends StatelessWidget {

  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(
        title: Text('Hole in rounded rectangle'),
      ),
      body: CustomPaint(
        painter: HolePainter(),
        child: Container(),
      ),

  }

}

结果:

enter image description here

当然,如果您希望孔是圆角矩形,只需减去 RRect 而不是 Circle

关于flutter - 用 flutter canvas 在形状上切一个洞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56923884/

相关文章:

flutter - 如何在 flutter 中对齐定位小部件内的文本?

functional-programming - 在 Flutter 中,如何使用流 API 将项目列表转换为 Table 小部件?

flutter - 如何覆盖 mixin 的主要抽象方法

flutter - 如何在 Flutter 的 Canvas 上绘制小部件?

flutter - 如何在 Flutter 中为自定义形状创建内部阴影?

flutter - 转义“Dart 中的正则表达式

dart - 在构建之前预加载 Assets 图像

flutter - 如何在其初始值 flutter 中将滚动条设置为最大值

android - Flutter - Webview_plugin - 我无法启用视频全屏