JavaFX TranslateTransition没有达到定义

时间:2017-11-25 13:05:14

标签: java javafx transition

我希望我的蓝色圆圈从一个浅蓝色圆圈变为另一个,但只有一半。

enter image description here

坐标显示相同:

initial_lightblue: 211.7,230.5
blue: 193.7,239.1
final_lighblue: 193.7,239.1

我的代码

TranslateTransition transition = new TranslateTransition();
transition.setToX(c.getX());
transition.setToY(c.getY());
transition.setNode(view);
transition.setInterpolator(Interpolator.LINEAR);
transition.play();

任何sugestions?

1 个答案:

答案 0 :(得分:1)

来自文档

  

TranslateTransition :此Transition创建一个跨越其持续时间的移动/翻译动画。这是通过更新   translateX,translateY和translateZ常规变量的变量   间隔。

因此,它将使用translate属性来重新定位窗格中的实际节点。如果您通过设置其layoutX和layoutY属性将节点定位在x = 50和y = 50,那么它们的转换值将为0,因此如果您实际尝试将TranslateTransition的结束坐标设置为ex。 x = 100 y = 100然后它将你的节点移动到x = 150和y = 150而不是(x,y)=(100,100)因为它将从0改变转换属性(x和y)到100将最终将节点移动到(x,y)= 150,150。

有人说这是一个例子:

import javafx.animation.Interpolator;
import javafx.animation.TranslateTransition;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;

public class Test extends Application {

    private Circle c1;
    private Circle c2;

    @Override
    public void start(Stage stage) throws Exception {

        AnchorPane pane = new AnchorPane();

        // Set only the radius
        c1 = new Circle(5);
        c1.setFill(Color.BLUE);

        // Let's translate the c1 to the location we want
        c1.setTranslateX(50);
        c1.setTranslateY(60);

        // The same for circle2
        c2 = new Circle(5);
        c2.setFill(Color.RED);

        c2.setTranslateX(120);
        c2.setTranslateY(200);

        pane.getChildren().addAll(c1, c2);

        pane.setOnMouseClicked(e -> {
            startAnimation();
        });

        stage.setScene(new Scene(pane, 400, 500));
        stage.show();
    }

    private void startAnimation() {
        TranslateTransition transition = new TranslateTransition();
        transition.setNode(c1);
        transition.setToX(c2.getTranslateX());
        transition.setToY(c2.getTranslateY());
        transition.setInterpolator(Interpolator.LINEAR);
        transition.play();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

PS :在您的代码示例中,您指的是圈子,但是您调用c.getX()实际取圆圈的x,这很奇怪,因为Circle类没有方法getX()我要求你引用getCenterX()或那些不是Circles。