JavaFX ScrollPane - 如何加速触摸设备上的滑动效果

3

我发现如果在触摸设备上的JavaFX应用程序中在ScrollPane内刷动,滚动动画会非常缓慢。我并没有在ScrollPane的ScrollBar上刷动,而是在内容本身内部。

如何加速刷动动画?

1个回答

1

这是触摸设备和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的值。 :) 希望它有用。我这里没有触摸设备来测试它。


我无法测试这个解决方案,但感谢你的回答。希望它能帮助到某些人。 - Johann
我在平板电脑上开发了一个JavaFX触摸应用程序,其中一些屏幕需要滚动。最初我使用了ScrollPane,但是滚动体验不够流畅。当你向上/向下滑动时,屏幕只会移动一点点。因此,我改用了ListView代替ScrollPane。内容位于VBox中,我将VBox放入ListView中。现在滚动非常流畅和快速。 - mcs75

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接