void play(){
setState(() {
tween = new VibesTween(
tween.evaluate(animation),
new Wave.random(size, random),
);
animation.forward(from: 0.0);
});
}
我需要调用此播放功能来动画特定的动画。唯一的问题是每次单击按钮时它都会运行。我需要它每隔1秒调用一次状态,然后每秒再次重新渲染动画。我怎样才能做到这一点?
答案 0 :(得分:3)
你真的不需要每秒呼叫setState
,你只需要一个重复的动画。对于这种情况,AnimationController
有repeat
方法。
要以最基本的形式将其设置为可以调用,
animationController.repeat();
但您也可以提供覆盖,如
animationController.repeat(min: 0.0, max: 1.0, period: Duration(seconds: 1));
答案 1 :(得分:1)
您可以在play()
方法中将其作为回调函数参数传递,每隔一秒调用Timer.Periodic(Duration, Callback)
方法。
const oneSec = const Duration(seconds: 1);
new Timer.periodic(oneSec, (Timer t) -> play());
答案 2 :(得分:0)
我确信您的animation
对象是AnimationController
。
创建它时,您只需添加状态监听器并每秒重新启动动画,如下所示:
animation = AnimationController(duration: const Duration(seconds: 1),)
..addStatusListener((AnimationStatus status) {
if (status == AnimationStatus.completed) {
setState(() {
tween = new VibesTween(
tween.evaluate(animation),
new Wave.random(size, random),
);
animation.forward(from: 0.0);
});
}
});
如果您不熟悉..
语法,它只会返回它执行void
函数的对象,这样您就可以使用方便的初始化你的animation
对象。
如果您想继续使用您的功能,您显然也可以拨打play
:
if (status == AnimationStatus.completed)
play();