Flutter缩放动画问题:如何实现从0到1后在0.8与1间交替?
解决方案
要实现先从0缩放至1,再在0.8与1之间交替变化的动画,你需要把动画拆分为两个阶段执行:
- 第一阶段:从0动画到1
- 第二阶段:在0.8和1之间循环反向动画
修改后的代码如下:
late final AnimationController _controller; late final Animation<double> _animation; @override void initState() { super.initState(); _controller = AnimationController( duration: const Duration(seconds: 2), vsync: this, ); _animation = CurvedAnimation( parent: _controller, curve: Curves.fastOutSlowIn, ); // 先执行从0到1的初始缩放动画 _controller.forward().then((_) { // 初始动画完成后,启动0.8与1之间的循环交替动画 _controller.repeat( min: 0.8, max: 1.0, reverse: true, // 可根据需求调整循环动画的时长 duration: const Duration(milliseconds: 1000), ); }); } @override void dispose() { _controller.dispose(); super.dispose(); }
代码说明:
- 初始时不再直接调用
repeat(),而是通过forward()让控制器从默认初始值0动画到1,完成第一阶段的缩放。 - 当
forward()动画执行完成后,通过then回调启动循环动画:设置min:0.8和max:1.0,并开启reverse:true,实现0.8与1之间的交替缩放。 - 你可以根据视觉需求调整循环阶段的
duration,控制交替的速度。
最后在界面中使用ScaleTransition包裹需要缩放的组件即可:
ScaleTransition( scale: _animation, child: // 替换为你的目标组件 )
内容的提问来源于stack exchange,提问作者deandrehaijiel
相关产品推荐
相关产品推荐

