2016-03-18 8 views
5

stworzyłem animację dla ImageView oparciu o RotatedTranstion stosując następujący kod:JavaFX: animacja Rotated opóźnienie pomiędzy cyklami

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

rotateTransition.play(); 

Wynika to w następujący animację:

Rotation in Action

Jak można zauważyć w animowanym gif, animacja nie jest ciągła, tzn. Występuje małe opóźnienie (przerwa) między cyklami animacji.

Próbowałem spojrzeć na API, ale nie mogę zrozumieć, co powoduje to opóźnienie i jak mogę się go pozbyć.

Odpowiedz

5

Pozorna pauza między każdym cyklem jest spowodowana przez interpolator, która domyślnie używa Interpolator.EASE_BOTH (tak, że zwalnia na końcu każdego cyklu i przyspiesza na początku).

W tym celu usunięcia tylko ustawić interpolator do Interpolator.LINEAR:

rotateTransition.setInterpolator(Interpolator.LINEAR); 
+2

Dzięki wielkie! W rzeczywistości próbowałem zmienić interpolator na inne wartości, ale nigdy nie próbowałem z Interpolatorem.LINEAR, ponieważ wroni sądziłem, że jest to domyślny. –

+0

@PabloNavais Ugh, to samo. Dlaczego do cholery nie jest liniowy, domyślnie zacząć! – xip

+0

Myślę, że 'EASE_BOTH' wygląda lepiej z' cycleCount' ustawionym na '1', który jest domyślnym' cycleCount'. Ale zgadzam się, "LINEAR" wydaje się bardziej naturalnym domyślnym. –

3

Czas do przyspieszania i hamowania w każdym cyklu Transition steruje Interpolator. Domyślnym Interpolator używanym przez Transition jest Interpolator.EASE_BOTH.

Chcesz interpolacja liniowa tak dodać do tego kodu:

rotateTransition.setInterpolator(Interpolator.LINEAR); 
+0

Wielkie dzięki Ron! –

Powiązane problemy