【问题标题】:JavaFX TranslateTransition doesn't go to the point definiedJavaFX TranslateTransition 没有达到定义的点
【发布时间】:2017-11-25 13:05:13
【问题描述】:

我希望我的蓝色圆圈从一个浅蓝色圆圈转到另一个,但只做了一半。

坐标看起来是一样的:

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();

有什么建议吗?

【问题讨论】:

    标签: java javafx transition


    【解决方案1】:

    来自文档

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

    所以它将使用翻译属性来重新定位窗格内的实际节点。话虽如此,如果您通过设置其 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);
        }
    }
    

    P.S:在您的代码示例中,您指的是圆圈,但您调用 c.getX() 来实际获取圆圈的 x,这很奇怪,因为 Circle 类没有方法 @ 987654323@我在问你指的是 getCenterX() 还是那些不是 Circles 。

    【讨论】:

    • 我注意到,当我在圆的构造函数上执行 setTranslateX 和 Y 而不是设置 X 和 Y 时,表示是不同的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-13
    • 2019-04-06
    相关资源
    最近更新 更多