美文网首页libGdx专题
ScrollPane左右滑动或者上下滑动翻页

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

作者: 大旺旺的弟弟小旺旺 | 来源:发表于2021-08-20 13:09 被阅读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;
        }
    

    手指滑动的操作:

    • filing
    • pan

    在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的值。

    相关文章

      网友评论

        本文标题:ScrollPane左右滑动或者上下滑动翻页

        本文链接:https://www.haomeiwen.com/subject/peetiltx.html