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;
}
手指滑动的操作:
- 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的值。