【问题标题】:Animation is slow in flutter动画在颤动中很慢
【发布时间】:2019-08-12 02:22:32
【问题描述】:

我在颤动的画布中为线条制作动画。我正在使用 AnimationController 来控制动画。当我为单行制作动画时,它会被动画化,没有任何滞后或性能问题。但是当我为超过 10 行制作动画时,它会在渲染线条时受到打击和滞后。在每一帧中,都会调用重绘以对线条进行动画处理。如何克服这个问题。

代码片段

class CrossPainter extends CustomPainter {
  Paint _paint;
  double _fraction;
  CrossPainter(this._fraction) {
    _paint = Paint()
      ..color = Colors.blue
      ..strokeWidth = 10.0
      ..strokeCap = StrokeCap.round;
  }

  @override
  void paint(Canvas canvas, Size size) {
    canvas.clipRect(Rect.fromLTRB(0, 0, _fraction * size.width , size.height));
    canvas.drawLine(Offset(0.0, 0.0), Offset(size.width , size.height ), _paint);
     canvas.drawLine(Offset(size.width, 0.0), Offset(size.width - size.width, size.height ), _paint);
  }

  @override
  bool shouldRepaint(CrossPainter oldDelegate) {
    return oldDelegate._fraction != _fraction;
  }
}

typedef FadeBuilder = Widget Function(BuildContext, double);
class _AnimationWrapper extends StatefulWidget {
  const _AnimationWrapper({this.builder});
  final FadeBuilder builder;

  @override
  _AnimationWrapperState createState() => _AnimationWrapperState();
}

class _AnimationWrapperState extends State<_AnimationWrapper> with SingleTickerProviderStateMixin {
  double opacity = 0.0;
  double _fraction = 0.0;
  Animation<double> animation;
  AnimationController controller;

  @override
  void initState() {
    super.initState();
    controller = AnimationController(duration: Duration(milliseconds: 3000), vsync: this);
    animation = Tween(begin: 0.0, end: 1.0).animate(controller)
      ..addListener(() {
        setState(() {
          _fraction = animation.value;
        });
      }
      );
    controller.forward();
  }
  @override void didUpdateWidget(_AnimationWrapper oldWidget) {
    // TODO: implement didUpdateWidget
    super.didUpdateWidget(oldWidget);
  }
  @override
  Widget build(BuildContext context) {
   return CustomPaint(painter: CrossPainter(_fraction));
  }
}

谢谢

阿什温

【问题讨论】:

标签: flutter flutter-animation


【解决方案1】:

如果我理解您的问题是正确的 - 这些延迟是由调试模式引起的。调试中的动画总是存在一些小问题。 尝试构建发布 apk 并启动它

【讨论】:

    猜你喜欢
    • 2012-08-10
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 2019-01-15
    相关资源
    最近更新 更多