JavaFX 动画:通过淡出退出无限过渡
JavaFX Animations: Quit an infinite transition by fading out
从程序开始有这样的动画:
tr = new FadeTransition(Duration.millis(1000), rect);
tr.setFromValue(0.5);
tr.setToValue(0.1);
tr.setCycleCount(Timeline.INDEFINITE);
tr.setAutoReverse(true);
显然它会无限循环。现在我想要一个停止它的功能,但只有在它淡出之后。这意味着下次它到达 "to value"(或 "from value")时应该停止动画。
现在我知道我可以通过将循环计数设置为 1 来在下一次迭代中结束动画。但是,这仅在动画之前已停止时有效。
tr.stop();
tr.setCycleCount(1);
tr.play();
但这意味着 .play() 函数会重新启动动画,导致闪烁,这并不是很漂亮。最后一个循环不会继续它之前的位置。
怎样才能顺利结束动画?
非常感谢!
总算自己找到了一个顺利的解决办法。
它没有使用无限循环,而是使用一个循环 2 和一个重新启动动画的完成事件:
tr = new FadeTransition(Duration.millis(1000), rect);
tr.setFromValue(0.1);
tr.setToValue(0.5);
tr.setAutoReverse(true);
tr.setCycleCount(2);
tr.play();
tr.setOnFinished((ActionEvent event) -> tr.play());
然后简单调用
tr.setOnFinished(null);
足以在最后一个过渡结束时顺利退出动画。
从程序开始有这样的动画:
tr = new FadeTransition(Duration.millis(1000), rect);
tr.setFromValue(0.5);
tr.setToValue(0.1);
tr.setCycleCount(Timeline.INDEFINITE);
tr.setAutoReverse(true);
显然它会无限循环。现在我想要一个停止它的功能,但只有在它淡出之后。这意味着下次它到达 "to value"(或 "from value")时应该停止动画。
现在我知道我可以通过将循环计数设置为 1 来在下一次迭代中结束动画。但是,这仅在动画之前已停止时有效。
tr.stop();
tr.setCycleCount(1);
tr.play();
但这意味着 .play() 函数会重新启动动画,导致闪烁,这并不是很漂亮。最后一个循环不会继续它之前的位置。
怎样才能顺利结束动画?
非常感谢!
总算自己找到了一个顺利的解决办法。 它没有使用无限循环,而是使用一个循环 2 和一个重新启动动画的完成事件:
tr = new FadeTransition(Duration.millis(1000), rect);
tr.setFromValue(0.1);
tr.setToValue(0.5);
tr.setAutoReverse(true);
tr.setCycleCount(2);
tr.play();
tr.setOnFinished((ActionEvent event) -> tr.play());
然后简单调用
tr.setOnFinished(null);
足以在最后一个过渡结束时顺利退出动画。