Flutter 自定义绘制图形示例
在Flutter中如何使用CustomPaint实现自定义图形绘制?比如我想画一个带渐变的五角星,但不太清楚如何计算坐标点和处理绘制逻辑。能否提供一个完整的示例代码,包括如何设置画笔属性、处理Canvas绘制以及如何将自定义图形嵌入到Widget树中?另外,在性能优化方面,有哪些需要注意的地方?
3 回复
以下是一个简单的 Flutter 自定义绘制图形的示例:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('自定义绘制示例')),
body: Center(
child: CustomPaint(
size: Size(200, 200),
painter: MyPainter(),
),
),
),
);
}
}
class MyPainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
final paint = Paint()
..color = Colors.blue
..style = PaintingStyle.fill;
final path = Path();
path.moveTo(0, size.height * 0.5);
path.lineTo(size.width * 0.5, size.height * 0.1);
path.lineTo(size.width, size.height * 0.5);
path.lineTo(size.width * 0.5, size.height * 0.9);
path.close();
canvas.drawPath(path, paint);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) => false;
}
这个例子中,我们创建了一个自定义的 CustomPainter
,并使用 Canvas
绘制了一个四边形。你可以根据需要修改路径和样式来绘制不同的图形。
更多关于Flutter 自定义绘制图形示例的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
以下是一个简单的 Flutter 自定义绘制图形的示例:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('自定义绘制图形')),
body: CustomPaintExample(),
),
);
}
}
class CustomPaintExample extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Center(
child: CustomPaint(
size: Size(200, 200),
painter: MyCustomPainter(),
),
);
}
}
class MyCustomPainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
Paint paint = Paint()
..color = Colors.blue
..style = PaintingStyle.stroke
..strokeWidth = 10;
Offset center = Offset(size.width / 2, size.height / 2);
canvas.drawCircle(center, 50, paint);
}
@override
bool shouldRepaint(CustomPainter oldDelegate) {
return false;
}
}
这个例子中,CustomPaint
组件用于自定义绘制,通过 MyCustomPainter
类实现。这里绘制了一个蓝色的圆形,设置其半径为50,并且有10像素的描边宽度。
以下是一个简单的Flutter自定义绘制图形的示例,使用CustomPaint绘制一个自定义的三角形和圆形:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Flutter自定义绘制')),
body: Center(
child: CustomPaint(
size: Size(300, 300),
painter: MyPainter(),
),
),
),
);
}
}
class MyPainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
final paint = Paint()
..color = Colors.blue
..style = PaintingStyle.fill;
// 绘制三角形
final path = Path();
path.moveTo(size.width / 2, 50); // 顶点
path.lineTo(size.width - 50, size.height - 50); // 右下角
path.lineTo(50, size.height - 50); // 左下角
path.close(); // 闭合路径
canvas.drawPath(path, paint);
// 绘制圆形
canvas.drawCircle(
Offset(size.width / 2, size.height / 2), // 圆心位置
50, // 半径
paint..color = Colors.red, // 修改颜色
);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) {
return false;
}
}
关键点说明:
CustomPaint
是用于自定义绘制的WidgetCustomPainter
类实现具体绘制逻辑paint()
方法中使用Canvas
进行绘制- 可以绘制基本图形(圆形、矩形等)或使用
Path
绘制复杂形状 shouldRepaint
决定是否需要重绘(这里返回false表示不需要重绘)