我发现如果在触摸设备上的JavaFX应用程序中在ScrollPane内刷动,滚动动画会非常缓慢。我并没有在ScrollPane的ScrollBar上刷动,而是在内容本身内部。
如何加速刷动动画?
这是触摸设备和ScrollPane的已知问题 ;) 如果您想加快动画速度,您需要自己设置位置。 我之前也用这种方法解决了同样的问题,效果很好。 您需要像这样做:
ScrollPane scrollPane = new ScrollPane();
final IntegerProperty vValueProperty = new SimpleIntegerProperty(0);
final int steps = 5;
scrollPane.vvalueProperty().bind(vValueProperty);
scrollPane.setOnSwipeDown(new EventHandler<GestureEvent>() {
public void handle(GestureEvent event) {
// calculate the needed value here
vValueProperty.set(vValueProperty.get() + steps);
}
});
event.consume();
但在这种情况下,您可能需要使用EventFilter,因为在事件执行任何操作之前会调用EventFilter。我不记得在EventHandler的结尾处使用consume()是否足够。如果不够,您需要使用类似以下内容的东西:
scrollPane.addEventFilter(SwipeEvent.SWIPE_DOWN,
new EventHandler<SwipeEvent>() {
public void handle(SwipeEvent event) {
vValueProperty.set(vValueProperty.get() - steps);
event.consume();
}
});
这只是为了加快动画速度。如果您希望Pane跟随手指移动,只需保存OnTouchDetected时获取的第一个值,并计算OnTouchMoved中的偏移量。这是您可以用来正确平移Pane的值。 :) 希望它有用。我这里没有触摸设备来测试它。