libGdx专题

ScrollPane左右滑动或者上下滑动翻页

2021-08-20  本文已影响0人  大旺旺的弟弟小旺旺

添加代码


            public boolean handle (Event event) {
                if (super.handle(event)) {
                    if (((InputEvent)event).getType() == InputEvent.Type.touchDown) {
                        flingTimer = 0;
                        flickScrollTouchUp = false;
                        startX = getScrollX();
                    }
                    if (((InputEvent)event).getType() == InputEvent.Type.touchUp) {
                        flickScrollTouchUp = true;
                        disTanceX = getScrollX() - startX;
                        isTouchUp = true;
                    }
                    return true;
                }
                return false;
            }

这一段记录手指是什么时候按下、什么时会弹起的,再弹起的时候执行翻页操作。

嵌套ScrollPane的使用

嵌套使用的时候,子scrollPane会处理掉事件,父亲Pane就接收不到事件,比如左右滑动的里面加一个上下滑动,我们只能再竖直方向进行滑动,水平就不是很灵敏。
解决方法就是再合适的时候执行。

    public void setCancelTouchFocus (boolean cancelTouchFocus) {
        this.cancelTouchFocus = cancelTouchFocus;
    }

手指滑动的操作:

在LibGdx中filing弹起的时候调用一次,pan是在滑动期间一直执行,所以手指滑动的时候,判断需要滑动的方向,然后执行sercancelTouchFocus方法。

flickScrollListener = new ActorGestureListener() {
            public void pan (InputEvent event, float x, float y, float deltaX, float deltaY) {
                resetFade();
                amountX -= deltaX;
                amountY += deltaY;
                clamp();
                //再手指滑动的过程中一直进行调用, 每次执行的时候  只需要将每次的方向记录下来即可
                if (!startDiedFangxiang) {
                    float dex = Math.abs(deltaX);
                    float dey = Math.abs(deltaY);
                    if (dex>10||dey>10) {
                        startDiedFangxiang = true;
                        if (dex > dey) {
//                            System.out.println("scroll x : 左右");
                            setCancelTouchFocus(false);
                        } else {
//                            System.out.println("scroll x : shangxia");
                            setCancelTouchFocus(true);
                        }
                    }
                }
   if (cancelTouchFocus && ((scrollX && deltaX != 0) || (scrollY && deltaY != 0))) cancelTouchFocus();
            }

            public void fling (InputEvent event, float x, float y, int button) {
                if (Math.abs(x) > 150 && scrollX) {
                    flingTimer = flingTime;
                    velocityX = x;
                    if (cancelTouchFocus) cancelTouchFocus();
                }
                if (Math.abs(y) > 150 && scrollY) {
                    flingTimer = flingTime;
                    velocityY = -y;
                    if (cancelTouchFocus) cancelTouchFocus();
                }
            }
        addListener(flickScrollListener);

一般手指按下又是一次新的判断,所以可以在touchDown的时候恢复cancelTouchFocus的值。

上一篇下一篇

猜你喜欢

热点阅读