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上。这行不行?