Android 如何从自定义绘制小部件更改为剪辑路径小部件?
这是我的原始代码,出于某些原因,我需要将其更改为clip path小部件。 作为一个初学者,这真的很难。。。 (顺便说一句,sSize是屏幕大小,而不是画布大小)Android 如何从自定义绘制小部件更改为剪辑路径小部件?,android,ios,flutter,dart,Android,Ios,Flutter,Dart,这是我的原始代码,出于某些原因,我需要将其更改为clip path小部件。 作为一个初学者,这真的很难。。。 (顺便说一句,sSize是屏幕大小,而不是画布大小) class CoverClipper扩展了CustomClipper{ @凌驾 路径getClip(大小){ //最终路径=路径(); 最后的双精度r=(size.width).toDouble()/6.8; 联合收割机( 病理手术, Path()…addRect(Rect.fromLTRB(size.width/2-r,0.6*si
class CoverClipper扩展了CustomClipper{
@凌驾
路径getClip(大小){
//最终路径=路径();
最后的双精度r=(size.width).toDouble()/6.8;
联合收割机(
病理手术,
Path()…addRect(Rect.fromLTRB(size.width/2-r,0.6*size.height-90-r,size.width/2+r,0.6*size.height-90+r)),
路径()
..添加椭圆(从圆开始的矩形)(
中心:偏移(尺寸.宽度/2,1.2/2*尺寸.高度-90),
半径:尺寸。宽度/6.8)
…关闭()
);
返回路径();
}
@凌驾
bool shouldReclip(CustomClipper oldClipper){
返回false;
}
}
我试着这样做,但什么也没发生。
没有错误,但什么也没有显示
class CoverClipper extends CustomClipper<Path> {
@override
Path getClip(Size size) {
//final path = Path();
final double r = (size.width).toDouble()/6.8;
Path.combine(
PathOperation.difference,
Path()..addRect(Rect.fromLTRB(size.width/2-r, 0.6*size.height-90-r, size.width/2+r, 0.6*size.height-90+r)),
Path()
..addOval(Rect.fromCircle(
center: Offset(size.width / 2, 1.2/2*size.height-90 ),
radius: size.width/6.8))
..close()
);
return Path();
}
@override
bool shouldReclip(CustomClipper<Path> oldClipper) {
return false;
}
}
class\u Layer2State扩展状态{
@凌驾
小部件构建(构建上下文){
最终大小=widget.Size;
//返回CustomPaint(油漆工:CoverPaint(sSize:尺寸));
返回ClipPath(
裁剪器:CoverClipper(),
子:容器(
颜色:颜色,白色,
高度:size.height,
宽度:size.width,
),
);
}
}
事实上,我对克利帕斯一无所知。
我需要帮助……您需要返回您要修改的实际路径,它将正常工作。返回的当前路径为空路径:
class _Layer2State extends State<Layer2> {
@override
Widget build(BuildContext context) {
final Size size = widget.size;
// return CustomPaint(painter: CoverPainter(sSize: size));
return ClipPath(
clipper: CoverClipper(),
child: Container(
color: Colors.white,
height: size.height,
width: size.width,
),
);
}
}
class CoverClipper扩展了CustomClipper{
@凌驾
路径getClip(大小){
最后的双精度r=(size.width).toDouble()/6.8;
返回路径.combine(
病理手术,
Path()…addRect(Rect.fromLTRB(size.width/2-r,0.6*size.height-90-r,size.width/2+r,0.6*size.height-90+r)),
路径()
..添加椭圆(从圆开始的矩形)(
中心:偏移(尺寸.宽度/2,1.2/2*尺寸.高度-90),
半径:尺寸。宽度/6.8)
…关闭()
);
}
@凌驾
bool shouldReclip(CustomClipper oldClipper){
return true;//您还可以将其更改为true以重新绘制。
}
}
您正在返回一个空路径():return Path();。。。您应该返回您创建的一个。更改代码如下:return Path.combine(~~~);没有发生任何事情啊,对不起,它起作用了,谢谢你的建议如果你写下这篇评论作为回答,我会选择它作为我问题的答案
class _Layer2State extends State<Layer2> {
@override
Widget build(BuildContext context) {
final Size size = widget.size;
// return CustomPaint(painter: CoverPainter(sSize: size));
return ClipPath(
clipper: CoverClipper(),
child: Container(
color: Colors.white,
height: size.height,
width: size.width,
),
);
}
}
class CoverClipper extends CustomClipper<Path> {
@override
Path getClip(Size size) {
final double r = (size.width).toDouble()/6.8;
return Path.combine(
PathOperation.difference,
Path()..addRect(Rect.fromLTRB(size.width/2-r, 0.6*size.height-90-r, size.width/2+r, 0.6*size.height-90+r)),
Path()
..addOval(Rect.fromCircle(
center: Offset(size.width / 2, 1.2/2*size.height-90 ),
radius: size.width/6.8))
..close()
);
}
@override
bool shouldReclip(CustomClipper<Path> oldClipper) {
return true; // you can also change this to true to repaint.
}
}