2016-03-18 10 views
5

Ho creato un'animazione per un ImageView sulla base di una RotatedTranstion utilizzando il seguente codice:JavaFX: ritardo di animazione ruotato tra i cicli

ImageView icon = ImageCache.getImage("refresh.png"); 
RotateTransition rotateTransition = new RotateTransition(Duration.millis(2000), icon); 
rotateTransition.setByAngle(360.0); 
rotateTransition.setCycleCount(Timeline.INDEFINITE); 

rotateTransition.play(); 

Il risultato è il seguente animazione:

Rotation in Action

Come avrete notato nella gif animata, l'animazione non è continua, ovvero c'è un piccolo ritardo (pausa) tra i cicli di animazione.

ho cercato di esaminare l'API, ma non riesce a capire che cosa provoca questo ritardo e come posso ottenere liberarsi di esso.

risposta

5

La pausa apparente tra ciascun ciclo è causata dallo interpolator, che per impostazione predefinita utilizza Interpolator.EASE_BOTH (quindi decelera alla fine di ogni ciclo e accelera all'inizio).

eliminare questa, è sufficiente impostare l'interpolatore a Interpolator.LINEAR:

rotateTransition.setInterpolator(Interpolator.LINEAR); 
+2

Grazie mille! In effetti ho provato a cambiare l'interpolatore con altri valori, ma non ho mai provato con Interpolator.LINEAR poiché credevo che fosse il default. –

+0

@PabloNavais Ugh, lo stesso. Perché diamine non è lineare il default per cominciare! – xip

+0

Immagino che 'EASE_BOTH' abbia un aspetto migliore con' cycleCount' impostato su '1', che è il predefinito' cycleCount'. Ma sono d'accordo, 'LINEAR' sembra un default più naturale. –

3

I tempi di accelerazione e decelerazione ad ogni ciclo Transition è controllata dal Interpolator. Il valore predefinito Interpolator utilizzato da Transition è Interpolator.EASE_BOTH.

Volete lineare interpolazione quindi aggiungere questo al codice:

rotateTransition.setInterpolator(Interpolator.LINEAR); 
+0

Grazie mille Ron! –

Problemi correlati