路径动画

示例:

 flutter 基础 —— CustomPaint 动画效果

 

代码

//路径动画
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);
}

 

 

旋转动画

示例:

flutter 基础 —— CustomPaint 动画效果

 

代码

//旋转动画
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

相关文章: