Java 通过拖动表格上下滚动
我想通过拖动我的表来上下滚动我的表(就像手机上的Facebook)我不能在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
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);
}
});