Flutter 如何设置clippath的起点

Flutter 如何设置clippath的起点,flutter,flutter-widget,Flutter,Flutter Widget,我将使用ClipPath()制作一个形状。但当我画它时,它似乎是从其父对象的(0.0)坐标开始的。但我希望它从另一个点开始(size.width*0.25,size.height)。我想做到这一点: 代码如下: import 'dart:core'; import 'package:flutter/material.dart'; class TheHill extends CustomClipper<Path> { @override

我将使用
ClipPath()
制作一个形状。但当我画它时,它似乎是从其父对象的(0.0)坐标开始的。但我希望它从另一个点开始(
size.width*0.25,size.height
)。我想做到这一点:

代码如下:

    import 'dart:core';
    import 'package:flutter/material.dart';

    class TheHill extends CustomClipper<Path> {
      @override
      Path getClip(Size size) {
        var path = Path();

        path.moveTo(size.width * 0.15, size.height);

        path.quadraticBezierTo(size.width * 0.25, size.height * 0.99999,
            size.width * 0.40, size.height * 0.92);

        path.quadraticBezierTo(size.width * 0.5, size.height * 0.87,
            size.width * 0.60, size.height * 0.92);

        path.quadraticBezierTo(size.width * 0.75, size.height * 0.99999,
            size.width * 0.85, size.height);

        path.lineTo(size.width, size.height);
        path.lineTo(0, size.height);

        path.lineTo(size.width, 0.0);
        path.close();

        return path;
      }

      @override
      bool shouldReclip(CustomClipper<Path> oldClipper) => false;
    }
导入“dart:core”;
进口“包装:颤振/材料.省道”;
类TheHill扩展自定义裁剪器{
@凌驾
路径getClip(大小){
var path=path();
路径.移动到(大小.宽度*0.15,大小.高度);
路径方形贝塞尔托(尺寸.宽度*0.25,尺寸.高度*0.9999,
尺寸.宽度*0.40,尺寸.高度*0.92);
路径。方形贝塞尔托(尺寸。宽度*0.5,尺寸。高度*0.87,
尺寸.宽度*0.60,尺寸.高度*0.92);
路径方形贝塞尔托(尺寸.宽度*0.75,尺寸.高度*0.9999,
尺寸.宽度*0.85,尺寸.高度);
path.lineTo(大小.宽度,大小.高度);
path.lineTo(0,大小.高度);
path.lineTo(size.width,0.0);
path.close();
返回路径;
}
@凌驾
bool shouldReclip(CustomClipper oldClipper)=>false;
}
这是输出(红色括号是IDK的额外部分,它来自哪里):
您可以使用以下方法

  ClipPath(
          clipper: TheHill(),
          child: Container(
            width: 250,
            height: 250,
            color: Colors.amber,
            child: Align(
              alignment: Alignment.bottomCenter,
              child: Icon(Icons.play_arrow),
            ),
          ),
        ),
自定义裁剪器:

class TheHill extends CustomClipper<Path> {
  @override
  Path getClip(Size size) {
    var path = Path();

    path.moveTo(size.width * 0.15, size.height);

    path.quadraticBezierTo(size.width * 0.25, size.height * 0.99999,
        size.width * 0.40, size.height * 0.92);

    path.quadraticBezierTo(size.width * 0.5, size.height * 0.87,
        size.width * 0.60, size.height * 0.92);

    path.quadraticBezierTo(size.width * 0.75, size.height * 0.99999,
        size.width * 0.85, size.height);

    path.lineTo(size.width, size.height);
    path.close();

    return path;
  }

  @override
  bool shouldReclip(CustomClipper<Path> oldClipper) => false;
}
class TheHill扩展自定义裁剪器{
@凌驾
路径getClip(大小){
var path=path();
路径.移动到(大小.宽度*0.15,大小.高度);
路径方形贝塞尔托(尺寸.宽度*0.25,尺寸.高度*0.9999,
尺寸.宽度*0.40,尺寸.高度*0.92);
路径。方形贝塞尔托(尺寸。宽度*0.5,尺寸。高度*0.87,
尺寸.宽度*0.60,尺寸.高度*0.92);
路径方形贝塞尔托(尺寸.宽度*0.75,尺寸.高度*0.9999,
尺寸.宽度*0.85,尺寸.高度);
path.lineTo(大小.宽度,大小.高度);
path.close();
返回路径;
}
@凌驾
bool shouldReclip(CustomClipper oldClipper)=>false;
}

path.lineTo(0,大小.高度);path.lineTo(size.width,0.0);删除这两行,然后再试一次。@VirenVVarasadiya填充了所有地方,除了我想要的地方。你想要什么形状?上面的山形状,除了我标记的三角形。我已经编辑了这篇文章。请再看一看。谢谢你花时间回答这个问题。但是代码有我想要的完全相反的结果。我希望填充的部分是空的,而填充的部分是空的。有点像一座小山。嗯,我想稍后制作一些动画。。。当使用自定义画师时,我不能这样做。而且它也不能分配给任何小部件,所以我只能将其用作背景。我不知道如何感谢您的时间。但我们能不能坚持下去?因为这是问题的关键。如果有什么不对劲的话,我会感谢你的解释。我的答案只写在clipPath上。这行不行?