2017-07-06 4 views
0

Haben Sie eine Animation, wie dies mit dem Programm zu starten:JavaFX Animationen: Beenden Sie einen unendlichen Übergang durch Einblenden

tr = new FadeTransition(Duration.millis(1000), rect); 
tr.setFromValue(0.5); 
tr.setToValue(0.1); 
tr.setCycleCount(Timeline.INDEFINITE); 
tr.setAutoReverse(true); 

Offensichtlich es endlos Schleifen. Jetzt möchte ich eine Funktion, die das stoppt, aber erst nachdem sie ausgeblendet wurde. Das bedeutet, dass das nächste Mal, wenn es seinen "Wert" (oder den "Wert") erreicht, die Animation aufhören sollte.

Jetzt weiß ich, dass ich die Animation bei der nächsten Iteration beenden kann, indem ich die Zykluszahl auf 1 setze. Das funktioniert jedoch nur, wenn die Animation zuvor gestoppt wurde.

tr.stop(); 
tr.setCycleCount(1); 
tr.play(); 

Aber das bedeutet, dass die .play() Funktion, um die Animation neu gestartet wird, ein Flackern verursacht, die nicht wirklich hübsch ist. Dieser letzte Zyklus geht nicht weiter, wo er vorher war.

Wie kann ich die Animation reibungslos beenden?

Vielen Dank im Voraus!

Antwort

0

Habe doch eine glatte Lösung gefunden. Stattdessen unendlichen Zyklus zu verwenden, verwendet es einen Zyklus von 2 und ein Ereignis fertig, die gerade die Animation startet:

tr = new FadeTransition(Duration.millis(1000), rect); 
tr.setFromValue(0.1); 
tr.setToValue(0.5); 
tr.setAutoReverse(true); 
tr.setCycleCount(2); 
tr.play(); 

tr.setOnFinished((ActionEvent event) -> tr.play()); 

dann einen einfachen Aufruf von

tr.setOnFinished(null); 

genügt, um sanft die Animation zu beenden an das Ende des letzten Übergangs.

Verwandte Themen