La scena è composta solo da un ImageView, che mostra un'immagine. Vorrei sfumare l'immagine in nero (colore assegnato della scena), quindi, dopo un po 'di tempo, sfumare di nuovo dal nero all'immagine. Ho trovato il FadeTransition molto adatto a questo scopo. Questo è un pezzo del mio codice:Come aspettare che una transizione termini in 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();
mio problema è che ft1.play()
è asincrona, in modo che il codice qui sotto comincerà ad essere eseguito prima ft1.play()
si esce. Come risultato vedo solo la seconda transizione. Come posso aspettare che la prima transizione termini e poi avviare la seconda transizione? Non riesco a mettere il thread in pausa perché è il thread javafx principale (provato e non funzionante).
Ho provato a utilizzare il metodo onFinishedProperty() con la combinazione di un busy-waiting su una bandiera, ma mi blocco nel ciclo while per sempre. Ecco il mio codice per questo:
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();
Come viene eseguita correttamente l'attesa? Grazie
Credo che stavo pensando che dal momento che le transizioni play() sono asincrone, avvengono su un altro thread, quindi sul thread dell'applicazione JavaFX. Questo è il motivo per cui ho pensato che avrei potuto fare in modo che il filo principale aspettasse che le transizioni finissero e poi riprendessero. Ora vedo che se il thread dell'applicazione sta dormendo, anche le transizioni non possono essere elaborate, giusto? Quindi immagino che SequentialTransition sia la soluzione più chiara per il mio caso. Grazie a te e Ukuk entrambi. – dadox