0

您可以在此处查看行为。我尝试了几种不同的技术,但我似乎无法做到正确。图像将在第一次完美拖放。之后,它将在再次拖动之前重新定位在原点。

@FXML
private ImageView imageId;

@FXML
private AnchorPane imagePane;

private double startX;
private double startY;

@FXML
private void loadImage(){
    double width = imagePane.getWidth();
    double height = imagePane.getHeight();
    Image image = new Image("main/buttercup2.jpg");
    imageId.setImage(image);
    imageId.setX(width/10);
    imageId.setY(height/10);
}

@FXML
private void closeImage(){
    imageId.setImage(null);
}


// ****below is the part where I am having trouble****

@FXML
private void initialize(){
    imageId.setOnMousePressed(e -> {
        startX = e.getSceneX();
        startY = e.getSceneY();
    });

    imageId.setOnMouseDragged(e -> {
        imageId.setTranslateX(e.getSceneX() - startX);
        imageId.setTranslateY(e.getSceneY() - startY);
    });
}
4

1 回答 1

1

您没有在计算中包含初始值translateXtranslateY。这样,小的移动会将平移重置为接近 0 的值。在计算中包含初始值应该可以解决此问题:

imageId.setOnMousePressed(e -> {
    startX = e.getSceneX() - imageId.getTranslateX();
    startY = e.getSceneY() - imageId.getTranslateY();
});
于 2018-08-31T20:01:38.207 回答