路径动画
示例:
代码
//路径动画
var path = Path()
..moveTo(50, 50)
..lineTo(100, 100)
..lineTo(200, 90);
var rect1 = Rect.fromCircle(center: Offset(80, 450), radius: 60);
// 中间断开了
path.arcTo(rect1, 0, pi, true);
//由于前面断开了,所以总共有两段路径
ui.PathMetrics pathMetrics = path.computeMetrics();
if (_controller.value < 0.5) {
var m = pathMetrics.first;
Path extPath = m.extractPath(0, m.length * _controller.value * 2);
canvas.drawPath(
extPath,
Paint()
..strokeWidth = 5
..style = PaintingStyle.stroke
..color = Colors.red);
} else {
var m = pathMetrics.last;
Path extPath = m.extractPath(0, m.length * (_controller.value - 0.5) * 2);
canvas.drawPath(
extPath,
Paint()
..strokeWidth = 5
..style = PaintingStyle.stroke
..color = Colors.red);
}
旋转动画
示例:
代码
//旋转动画
canvas.save();
canvas.translate(100, 100);
final radians = _controller.value * 2 * pi;
canvas.rotate(radians);
canvas.translate(-100, -100);
canvas.drawLine(
Offset(100, 100),
Offset(130, 196),
Paint()
..strokeWidth = 5
..color = Colors.green);
canvas.restore();
2333