Flutter:如何在容器内绘制垂直正弦波?
Flutter : How to draw a vertical sine wave inside a container?
如何在 flutter 的容器内绘制这样的东西?
PS 我是 flutter 新手。
提前致谢。
你可以试试这个,这个想法是使用多个 quadraticBezierTo
。切记B、C、D要在同一条直线上才能使接缝顺畅:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Center(
child: Container(
width: 300,
height: 700,
color: Colors.yellow,
child: CustomPaint(painter: FaceOutlinePainter()),
),
),
),
);
}
}
class FaceOutlinePainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
Paint paint = Paint()
..color = Colors.red
..style = PaintingStyle.stroke
..strokeWidth = 8.0;
Path path = Path();
path.moveTo(size.width / 2, 0); //Ax, Ay
path.quadraticBezierTo(size.width, size.height / 8, size.width / 2, size.height / 4); //Bx, By, Cx, Cy
path.quadraticBezierTo(0, 3 * size.height / 8, size.width / 2, size.height / 2); //Dx, Dy, Ex, Ey
canvas.drawPath(path, paint);
}
@override
bool shouldRepaint(FaceOutlinePainter oldDelegate) => false;
}
如何在 flutter 的容器内绘制这样的东西? PS 我是 flutter 新手。 提前致谢。
你可以试试这个,这个想法是使用多个 quadraticBezierTo
。切记B、C、D要在同一条直线上才能使接缝顺畅:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Center(
child: Container(
width: 300,
height: 700,
color: Colors.yellow,
child: CustomPaint(painter: FaceOutlinePainter()),
),
),
),
);
}
}
class FaceOutlinePainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
Paint paint = Paint()
..color = Colors.red
..style = PaintingStyle.stroke
..strokeWidth = 8.0;
Path path = Path();
path.moveTo(size.width / 2, 0); //Ax, Ay
path.quadraticBezierTo(size.width, size.height / 8, size.width / 2, size.height / 4); //Bx, By, Cx, Cy
path.quadraticBezierTo(0, 3 * size.height / 8, size.width / 2, size.height / 2); //Dx, Dy, Ex, Ey
canvas.drawPath(path, paint);
}
@override
bool shouldRepaint(FaceOutlinePainter oldDelegate) => false;
}