私のシーンは、画像を表示する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()
。その結果、2番目の遷移のみが表示されます。最初の遷移が終了するのを待ってから、2番目の遷移を開始するにはどうすればよいですか?スレッドがメインの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();
待機はどのように適切に行われますか?ありがとうございました