Paint paint = Paint() ..color = Colours.text_gray_c ..strokeWidth = 2.0 ..style = PaintingStyle.stroke; Path path = Path(); double radius = 20; // 圆角半径 path.moveTo(50, 25); path.lineTo(size.width / 2 - 5 - radius, 25); path.arcToPoint( Offset(size.width / 2 - 5, 20 + radius), radius: Radius.circular(radius), ); path.lineTo(size.width / 2 - 5, 80); canvas.drawPath(path, paint);怎么在这条线上加一个从起点到终点不停滑动的小圆球
时间: 2023-11-22 10:56:25 浏览: 136
你可以在 `canvas.drawPath(path, paint)` 之前,先在起点处绘制一个小圆球。然后在绘制路径的过程中,你需要计算小圆球在路径上的位置,然后使用 `canvas.drawCircle()` 方法绘制小圆球。下面是一个实现示例:
```dart
Paint paint = Paint()
..color = Colors.grey
..strokeWidth = 2.0
..style = PaintingStyle.stroke;
Path path = Path();
double radius = 20; // 圆角半径
path.moveTo(50, 25);
path.lineTo(size.width / 2 - 5 - radius, 25);
path.arcToPoint(
Offset(size.width / 2 - 5, 20 + radius),
radius: Radius.circular(radius),
);
path.lineTo(size.width / 2 - 5, 80);
// 绘制路径
canvas.drawPath(path, paint);
// 计算小圆球在路径上的位置
double progress = 0.5; // 进度,取值范围为 [0, 1]
PathMetrics pathMetrics = path.computeMetrics();
PathMetric pathMetric = pathMetrics.elementAt(0);
Tangent tangent = pathMetric.getTangentForOffset(pathMetric.length * progress);
Offset center = tangent.position;
// 绘制小圆球
paint.style = PaintingStyle.fill;
canvas.drawCircle(center, 5, paint);
```
这里假设小圆球的半径为 5。`progress` 表示小圆球在路径上的进度,取值范围为 [0, 1]。`Path.computeMetrics()` 方法返回一个 `PathMetrics` 对象,可以用来获取路径的测量信息。`PathMetrics.elementAt()` 方法可以获取指定索引的 `PathMetric` 对象,然后可以使用 `PathMetric.getTangentForOffset()` 方法获取指定偏移量处的切线信息,包括位置、角度等。最后使用 `canvas.drawCircle()` 方法绘制小圆球即可。
阅读全文