我正在尝试用flutter customPainter库绘制下面的图片。我该如何绘制这个形状?
我的代码和结果
import 'package:flutter/material.dart';
class CurvePainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
var paint = new Paint();
paint.color = Colors.green[800];
paint.style = PaintingStyle.fill;
var path = new Path();
path.lineTo(0, size.height * 0.3);
path.quadraticBezierTo(size.width * 0.35, size.height * 0.4, size.width * 0.7, size.height * 0.21);
path.quadraticBezierTo(size.width * 0.6, size.height * 0.19, size.width * 0.9, size.height * 0.15);
path.quadraticBezierTo(size.width , size.height * 0.05, size.width * 0.6, 0);
canvas.drawPath(path, paint);
}
@override
bool shouldRepaint(CustomPainter oldDelegate) {
return true;
}
}
1条答案
按热度按时间fcy6dtqo1#
您选择的贝塞尔曲线不正确。
这里我举例说明我在哪里应用了哪些曲线。黄点是 * 起点和终点 *,黑点代表 * 控制点 *。
在代码中,我从左到右(从上到下),使用
arcToPoint
代替conicTo
,因为arcToPoint
效果更好。这只是一个 * 粗略的草图 *,即比例是完全关闭,但至少我可以分享适当的贝塞尔曲线您应该使用,以实现您想要的输出。
注意,我更新了语法,使用
..
级联表示法和final
关键字表示变量。