Mi escena consiste solamente en ImageView, que muestra una imagen. Me gustaría fundir la imagen en negro (color asignado de la escena), luego, después de un tiempo, volver a difuminar de negro a la imagen. Encontré el FadeTransition muy apropiado para este propósito. Esta es una parte de mi código:¿Cómo esperar a que finalice una transición en 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();
Mi problema es que ft1.play()
es asíncrona, por lo que el código de abajo comenzará a ser ejecutado antes de ft1.play()
se sale. Como resultado, veo solo la segunda transición. ¿Cómo puedo esperar a que finalice la primera transición y luego iniciar la segunda transición? No puedo poner el hilo a dormir mientras tanto porque es el hilo principal de javafx (lo probé y no funcionó).
Intenté utilizar el método onFinishedProperty() con la combinación de una espera de un indicador, pero me atasco en el ciclo while para siempre. Aquí está mi código para eso:
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();
¿Cómo se hace la espera correctamente? Gracias
Supongo que estaba pensando que, dado que las transiciones play() son asincrónicas, suceden en otro hilo, luego en el hilo de la aplicación JavaFX. Esta es la razón por la que pensé que podría hacer que el hilo principal esperara a que las transiciones terminaran y luego reanudaran. Ahora veo que si el hilo de la aplicación está durmiendo, las transiciones tampoco se pueden procesar, ¿verdad? Así que supongo que SequentialTransition es la solución más clara para mi caso. Gracias a ti y a Ukuk ambos. – dadox