我有一个内部有几个演员的scrollPane。每个演员都有一个注册的触摸事件来设置一个新的屏幕,但是用户显然希望能够在没有触摸注册的情况下滚动演员列表。我该如何解决这个问题?演员正在注册触摸事件如下......
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button){
octave3Btn.getColor().a = 0.25f;
return true;
}
public void touchUp(InputEvent event, float x, float y, int pointer, int button){
octave3Btn.getColor().a = 1f;
launcher.setScreen(new ListNotesScreen(NoteNameAssets.octave3NoteNameArray,ImageAssets.octave3BtnTextureArray,manager, launcher));
}
答案 0 :(得分:4)
使用touchDragged
回调来了解是否存在拖动。
private boolean wasDragged = false;
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
octave3Btn.getColor().a = 0.25f;
wasDragged = false;
return true;
}
public boolean touchDragged(InputEvent event, float x, float y, int pointer) {
// you can use a simple flag here, or better calculate the distance
// and set the flag when the distance surpassed a certain limit
wasDragged = true;
}
public boolean touchUp(InputEvent event, float x, float y, int pointer, int button) {
octave3Btn.getColor().a = 1f;
if (!wasDragged) {
launcher.setScreen(new ListNotesScreen(...));
}
}
这应该考虑到小错误。如果存在1px的拖动事件,您可能不会设置标志。更好地计算在touchDown
和touchUp
之间拖动触摸的距离,然后在例如distance < 10
的情况下切换屏幕。
答案 1 :(得分:0)
在我看来,最好的解决方案是使用clicked()
代替touchUp()
。我知道这个问题是3年,我是为“后代”写的:)
myButton.addListener(new ClickListener()
{
@Override
public void clicked(InputEvent event, float x, float y)
{
//do your stuff
super.clicked(event, x, y);
}
});