绘画¶
CustomPaint是一个提供给开发者自定义绘画操作的控件。它将绘制逻辑委托给CustomPainter对象。
CustomPaint 控件有两个属性:painter 和 foregroundPainter,它们都可以接收一个 CustomPainter 对象。
-
painter:用于在子控件被绘制之前进行绘制操作。可以在这里实现你的绘制逻辑,比如画线、画圈、画路径等。这个绘画层位于CustomPaint控件的子控件下面,任何在这里绘制的内容都会被子控件覆盖。 -
foregroundPainter:它是在子控件被绘制之后进行绘制操作,通过foregroundPainter绘制的内容会覆盖在子控件上面。这可以用来添加高亮效果、覆盖图层或者其他需要显示在子控件之上的绘制效果。
CustomPainter 是一个抽象类,至少需要实现以下两个方法:
class HHBasePainter extends CustomPainter {
/// 这个方法包含实际的绘制命令,使用提供的 `Canvas` 对象在给定的 `Size` 范围内进行绘制。
@override
void paint(Canvas canvas, Size size) {
/// paint:具体怎么画
/// canvas:画点、线、圆圈、长方形。使用`cavas.`来画
/// size:画布大小
}
/// 这个方法决定在什么情况下应该重新绘制。例如,如果你的绘制依赖于某些数据模型,当模型改变时,需要返回`true`来重绘控件。
/// shouldRepaint:该函数返回true时,画布会重新绘制
/// 上一帧动画可以做对比
@override
bool shouldRepaint(CustomPainter oldDelegate) => true;
}
下面是一个简单的使用 CustomPaint 的例子:
CustomPaint(
size: Size(200, 200), // 指定绘制区域的大小
painter: MyCustomPainter(), // 自定义的绘制逻辑
foregroundPainter: MyForegroundCustomPainter(), // 自定义的前景绘制逻辑
child: ... // 子控件
)
在这个例子中,MyCustomPainter 和 MyForegroundCustomPainter 是开发者定义的类,它们分别扩展了 CustomPainter 类并实现了必要的方法。通过这种方式,可以在 CustomPaint 控件的背景和前景层进行复杂的绘制操作。