JavaFX TranslateTransition 没有到达定义的点
JavaFX TranslateTransition doesn't go to the point definied
我想让我的蓝色圆圈从一个浅蓝色圆圈变成另一个,但只做了一半。
坐标显示相同:
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();
有什么建议吗?
来自文档
TranslateTransition : This Transition creates a move/translate animation that spans its duration. This is done by updating the
translateX, translateY and translateZ variables of the node at regular
interval.
所以它将使用翻译属性来重新定位窗格内的实际节点。话虽如此,如果您通过设置节点的 layoutX 和 layoutY 属性将节点定位在 x=50 和 y=50,它们的平移值将为 0,因此如果您实际上尝试将 TranslateTransition 的结束坐标设置为 ex。 x = 100 y = 100 然后它会将你的节点移动到 x = 150 和 y = 150 而不是 (x,y) = (100,100) 导致它会改变翻译 属性 (x 和y) 从 0 到 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 class 没有方法 getX()
我怀疑你是指 getCenterX() 或者那些不是 Circles 。
我想让我的蓝色圆圈从一个浅蓝色圆圈变成另一个,但只做了一半。
坐标显示相同:
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();
有什么建议吗?
来自文档
TranslateTransition : This Transition creates a move/translate animation that spans its duration. This is done by updating the translateX, translateY and translateZ variables of the node at regular interval.
所以它将使用翻译属性来重新定位窗格内的实际节点。话虽如此,如果您通过设置节点的 layoutX 和 layoutY 属性将节点定位在 x=50 和 y=50,它们的平移值将为 0,因此如果您实际上尝试将 TranslateTransition 的结束坐标设置为 ex。 x = 100 y = 100 然后它会将你的节点移动到 x = 150 和 y = 150 而不是 (x,y) = (100,100) 导致它会改变翻译 属性 (x 和y) 从 0 到 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 class 没有方法 getX()
我怀疑你是指 getCenterX() 或者那些不是 Circles 。