我希望我的蓝色圆圈从一个浅蓝色圆圈变为另一个,但只有一半。
坐标显示相同:
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?
答案 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。