Java 通过拖动表格上下滚动

Java 通过拖动表格上下滚动,java,scroll,libgdx,drag,Java,Scroll,Libgdx,Drag,我想通过拖动我的表来上下滚动我的表(就像手机上的Facebook)我不能在Y上做这个数学东西我不知道为什么当我拖动它时它会变得疯狂。参数x和Y在InputListener的方法中是局部坐标(即相对于表的坐标),因此,您需要将它们转换为表的父坐标系: table1.addListener(new InputListener(){ @Override public boolean touchDown(InputEvent event, float x, float

我想通过拖动我的表来上下滚动我的表(就像手机上的Facebook)我不能在
Y
上做这个数学东西我不知道为什么当我拖动它时它会变得疯狂。

参数
x
Y
InputListener
的方法中是局部坐标(即相对于
表的坐标),因此,您需要将它们转换为
表的父坐标系:

 table1.addListener(new InputListener(){
        @Override
        public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
           scroll=y;
            System.out.print(scroll);
            return true;
        }

        @Override
        public void touchDragged(InputEvent event, float x, float y, int pointer) {

            table1.setPosition((scroll+(y)));
        }});
顺便说一下,在您的情况下,使用
滚动窗格
可能是更好、更方便的解决方案:

Upd:

实际上,由于您只需要
deltaY
,因此无需转换坐标即可:

table.addListener(new InputListener() {

    Vector2 vec = new Vector2();

    @Override
    public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
        table.localToParentCoordinates(vec.set(x, y));
        return true;
    }

    @Override
    public void touchDragged(InputEvent event, float x, float y, int pointer) {
        float oldTouchY = vec.y;
        table.localToParentCoordinates(vec.set(x, y));
        table.moveBy(0f, vec.y - oldTouchY);
    }
});
table.addListener(new InputListener() {

    float touchY;

    @Override
    public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
        touchY = y;
        return true;
    }

    @Override
    public void touchDragged(InputEvent event, float x, float y, int pointer) {
        // since you move your table along with pointer, your touchY will be the same in table's local coordinates
        float deltaY = y - touchY;
        table.moveBy(0f, deltaY);
    }
});