libGDX如果用户在触摸后移动手指,如何停止touchUp注册

时间:2014-05-27 10:12:28

标签: java libgdx

我有一个内部有几个演员的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));
}

2 个答案:

答案 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的拖动事件,您可能不会设置标志。更好地计算在touchDowntouchUp之间拖动触摸的距离,然后在例如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);
    }
});