我的场景仅包含一个ImageView,显示图像。我想将图像淡化为黑色(场景的指定颜色),然后在一段时间后再次从黑色淡化为图像。我发现FadeTransition非常适合此目的。这是我的一段代码:
// fade to black transition
FadeTransition ft1 = new FadeTransition(Duration.millis(2000), myImageView);
ft1.setFromValue(1.0);
ft1.setToValue(0.0);
ft1.play();
// fade from black transition
FadeTransition ft2 = new FadeTransition(Duration.millis(2000), myImageView);
ft2.setFromValue(0.0);
ft2.setToValue(1.0);
ft2.play();
我的问题是异步的,所以下面的代码将在退出ft1.play()
之前开始执行。ft1.play()
结果,我只看到第二个过渡。如何等待第一个过渡结束然后启动第二个过渡?我不能让线程在两者之间休眠,因为它是主要的 javafx 线程(尝试过但没有工作)。
我尝试将 onFinishedProperty() 方法与标志上的忙等待结合使用,但我永远卡在 while 循环中。这是我的代码:
boolean isTransitionPlaying;
FadeTransition ft = new FadeTransition(Duration.millis(2000), iv);
ft.setFromValue(1.0);
ft.setToValue(0.0);
ft.onFinishedProperty().set(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
transitionPlaying = false;
}
});
transitionPlaying = true;
ft.play();
while (transitionPlaying == true)
{
// busy wait
System.out.println("still waiting...");
}
FadeTransition ft2 = new FadeTransition(Duration.millis(2000), iv);
ft2.setFromValue(0.0);
ft2.setToValue(1.0);
ft2.play();
等待是如何正确完成的?谢谢