Flutter 如何实现图形绘制
在Flutter中实现图形绘制有哪些方法?我想画一些简单的几何图形和自定义路径,但不太清楚该用CustomPaint还是第三方库。能否介绍下Flutter原生支持的绘制方式,以及如何控制绘制的层级和性能优化?最好能提供一些基础图形的绘制代码示例。
2 回复
Flutter中可通过CustomPaint和CustomPainter实现图形绘制。CustomPaint作为画布容器,CustomPainter定义绘制逻辑,使用Canvas的drawRect、drawCircle等方法绘制图形,结合Paint设置样式。
更多关于Flutter 如何实现图形绘制的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 中,可以通过以下方式实现图形绘制:
1. CustomPaint 组件
这是最常用的图形绘制方式:
CustomPaint(
painter: MyCustomPainter(),
size: Size(300, 300),
)
2. 自定义 Painter
创建自定义绘制类:
class MyCustomPainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
final paint = Paint()
..color = Colors.blue
..style = PaintingStyle.fill;
// 绘制圆形
canvas.drawCircle(
Offset(size.width / 2, size.height / 2),
50,
paint,
);
// 绘制矩形
canvas.drawRect(
Rect.fromCenter(
center: Offset(size.width / 2, size.height / 2),
width: 100,
height: 80,
),
paint..color = Colors.red,
);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) => false;
}
3. 常用绘制方法
void paint(Canvas canvas, Size size) {
final paint = Paint()
..color = Colors.black
..strokeWidth = 2
..style = PaintingStyle.stroke;
// 绘制直线
canvas.drawLine(Offset(0, 0), Offset(100, 100), paint);
// 绘制路径
final path = Path()
..moveTo(50, 50)
..lineTo(100, 100)
..quadraticBezierTo(150, 50, 200, 100);
canvas.drawPath(path, paint);
// 绘制文字
final textPainter = TextPainter(
text: TextSpan(text: 'Hello', style: TextStyle(color: Colors.black)),
textDirection: TextDirection.ltr,
)..layout();
textPainter.paint(canvas, Offset(50, 50));
}
4. 动画绘制
结合 AnimationController 实现动画效果:
class AnimatedPainter extends CustomPainter {
final Animation<double> animation;
AnimatedPainter(this.animation) : super(repaint: animation);
@override
void paint(Canvas canvas, Size size) {
final radius = 50.0 * animation.value;
canvas.drawCircle(
Offset(size.width / 2, size.height / 2),
radius,
Paint()..color = Colors.blue,
);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) => true;
}
这些方法可以满足大部分图形绘制需求,从简单的几何图形到复杂的自定义图形都能实现。

