跳转至

绘画

CustomPaint是一个提供给开发者自定义绘画操作的控件。它将绘制逻辑委托给CustomPainter对象。

CustomPaint 控件有两个属性:painterforegroundPainter,它们都可以接收一个 CustomPainter 对象。

  1. painter:用于在子控件被绘制之前进行绘制操作。可以在这里实现你的绘制逻辑,比如画线、画圈、画路径等。这个绘画层位于 CustomPaint 控件的子控件下面,任何在这里绘制的内容都会被子控件覆盖。

  2. 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: ... // 子控件
)

在这个例子中,MyCustomPainterMyForegroundCustomPainter 是开发者定义的类,它们分别扩展了 CustomPainter 类并实现了必要的方法。通过这种方式,可以在 CustomPaint 控件的背景和前景层进行复杂的绘制操作。