Использование преобразований дает вам лучший контроль над порядком преобразований.Кроме того, некоторые преобразования позволяют указывать точку разворота, что невозможно, например, для свойства Node.rotate
.Преобразования в списке применяются «справа налево».(Преобразование с самым высоким индексом применяется первым).
В следующем примере показано, как перемещать прямоугольник, вращающийся вокруг своего собственного центра (даже если цикл сбрасывается в исходное положение вместо непрерывного перемещения в одном и том же направлении, но свойства преобразований могут быть независимо анимированы произвольным образом):
@Override
public void start(Stage primaryStage) {
Rectangle view = new Rectangle(100, 100);
// pivot point = center of rect
Rotate rotate = new Rotate(0, 50, 50);
Translate translate = new Translate();
// rotate first, then move
view.getTransforms().addAll(translate, rotate);
Timeline timeline = new Timeline(
new KeyFrame(Duration.ZERO, new KeyValue(translate.xProperty(), 0d),
new KeyValue(translate.yProperty(), 0d), new KeyValue(rotate.angleProperty(), 0d)),
new KeyFrame(Duration.seconds(2), new KeyValue(translate.xProperty(), 300d),
new KeyValue(translate.yProperty(), 500d), new KeyValue(rotate.angleProperty(), 360d)));
timeline.setCycleCount(Animation.INDEFINITE);
timeline.play();
Pane root = new Pane(view);
Scene scene = new Scene(root, 500, 500);
primaryStage.setScene(scene);
primaryStage.show();
}