Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JavaFX : Rotated animation delay between cycles

I've created an animation for an ImageView based on a RotatedTranstion using the following code :

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

rotateTransition.play();

This results in the following animation :

Rotation in Action

As you may have noticed in the animated gif, the animation is not continuous i.e there is a small delay (pause) between animation cycles.

I've tried to look at the API but can't figure out what causes this delay and how i can get rid of it.

like image 635
Pablo Navais Avatar asked Mar 18 '16 12:03

Pablo Navais


2 Answers

The apparent pause between each cycle is caused by the interpolator, which by default uses Interpolator.EASE_BOTH (so it decelerates at the end of each cycle and accelerates at the beginning).

To remove this, just set the interpolator to Interpolator.LINEAR:

rotateTransition.setInterpolator(Interpolator.LINEAR);
like image 115
James_D Avatar answered Nov 11 '22 13:11

James_D


The timing for acceleration and deceleration at each Transition cycle is controlled by the Interpolator. The default Interpolator used by Transition is Interpolator.EASE_BOTH.

You want linear interpolation so add this to your code:

rotateTransition.setInterpolator(Interpolator.LINEAR);
like image 28
Ron C Avatar answered Nov 11 '22 15:11

Ron C