我的場景僅包含ImageView,顯示圖像。我想將圖像淡化爲黑色(場景的指定顏色),然後一段時間後,再次從黑色淡出到圖像。我發現FadeTransition非常適合這個目的。這是一張我的代碼:如何等待在javafx 2.1中結束轉換?
// 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();
等待如何正確完成?謝謝
我想我在想,因爲轉換play()是異步的,它們發生在另一個線程上,然後是JavaFX應用程序線程。這就是爲什麼我認爲我可以讓主線等待轉換完成他們的事情,然後恢復。現在我看到,如果應用程序線程正在休眠,那麼轉換也無法處理,對嗎? 所以我認爲SequentialTransition是我的案例的最清晰的解決方案。感謝你和Ukuk。 – dadox