【发布时间】:2017-02-11 04:19:14
【问题描述】:
我需要相对于鼠标位置放大/缩小滚动窗格。
我目前通过将我的内容包装在一个组中并缩放组本身来实现缩放功能。我使用自定义枢轴创建了一个新的 Scale 对象。 (Pivot设置为鼠标位置)
这非常适用于 Group 的初始比例为 1.0,但之后的缩放不会在正确的方向上缩放 - 我相信这是因为当 Group 被缩放时相对鼠标位置发生了变化。
我的代码:
@Override
public void initialize(URL location, ResourceBundle resources) {
Delta initial_mouse_pos = new Delta();
anchorpane.setOnScrollStarted(event -> {
initial_mouse_pos.x = event.getX();
initial_mouse_pos.y = event.getY();
});
anchorpane.setOnScroll(event -> {
double zoom_fac = 1.05;
double delta_y = event.getDeltaY();
if(delta_y < 0) {
zoom_fac = 2.0 - zoom_fac;
}
Scale newScale = new Scale();
newScale.setPivotX(initial_mouse_pos.x);
newScale.setPivotY(initial_mouse_pos.y);
newScale.setX( content_group.getScaleX() * zoom_fac );
newScale.setY( content_group.getScaleY() * zoom_fac );
content_group.getTransforms().add(newScale);
event.consume();
});
}
private class Delta { double x, y; }
如何在不同的缩放级别获得正确的鼠标位置?是否有一种完全不同的方式可以更轻松地缩放 ScrollPane?
【问题讨论】:
-
这里是the code I use,用于动态节点缩放。
标签: java javafx javafx-8 zooming scrollpane