如何在颤抖中使CustomPaint像这样

时间:2020-05-28 17:59:06

标签: flutter dart graphics

我知道这不是最好的方法,但是我真的做不到。如何做这样的事情。我很迷恋几何。我试图用cubicTo做到这一点,但我没有得到这个效果:/。

有人可以帮助我吗?以下是我的代码的一部分。

var sw = size.width;
var sh = size.height;

var path = Path();

path.cubicTo(sw/2, 0, sw/4, 0, 2*sw/4, 2*sh/4);
path.cubicTo(2*sw/3, 2*sh/3, sw/3, 0, sw, 0);
path.cubicTo(0, 0, 0, 0, sw, 0);
path.lineTo(sw, sh);
path.lineTo(0, sh);
path.close();

enter image description here

2 个答案:

答案 0 :(得分:3)

检查一下...

class Paintter extends CustomPainter{
  @override
  void paint(Canvas canvas, Size size) {
    Paint paint = Paint()..color = Colors.orange;
    var path = Path();
    double factor = 100;
    path.lineTo(0, size.height);
    path.lineTo(size.width, size.height);
    path.lineTo(size.width, 0);
    path.lineTo(size.width - factor, 0);
    path.quadraticBezierTo(size.width/2, size.height, factor, 0);
    path.lineTo(0, 0);
    canvas.drawPath(path, paint);
  }

输出: enter image description here

答案 1 :(得分:2)

Path@arcToPoint对于绘制圆/椭圆段非常有用。

例如,对于半径等于矩形的一半高度的圆:

final w = size.width;
final h = size.height;
final r = h / 2;

final path = Path();
path.moveTo(0, 0);
path.lineTo(w / 2 - r, 0);
path.arcToPoint(
  Offset(w / 2 + r, 0),
  radius: Radius.circular(r),
  clockwise: false,
);
path.lineTo(w, 0);
path.lineTo(w, h);
path.lineTo(0, h);
path.close();

Result