如果之前点击了另一个按钮,如何防止onClick

时间:2017-04-19 20:07:36

标签: java android

我有4个按钮可以改变视图移动的方向(向上,向右,向下,向左)。 这个运动被称为:

handler.postDelayed(new Runnable() {
    @Override
        public void run() {
            move();
            handler.postDelayed(this, delay);
        }
    }, delay);

如果前一个方向相反,我想阻止用户改变方向。但是在我的应用程序中,当你向右移动然后向上移动然后向左移动导致视图向左移动时,它是可能的。期望的行为是视图在这种情况下向上移动而不是离开。

这就是move()的样子:

public void move() {
    switch(direction) {
        case 'N': moveUp();
            break;
        case 'E': moveRight();
            break;
        case 'S': moveDown();
            break;
        case 'W': moveLeft();
            break;
    }
}

这是onClick()

@Override
    public void onClick(View view) {
        switch(view.getId()) {
            case R.id.buttonUp:
                if(direction == 'S') {
                    break;
                }
                direction = 'N';
                break;
            case R.id.buttonRight:
                if(direction == 'W') {
                    break;
                }
                direction = 'E';
                break;
            case R.id.buttonDown:
                if(direction == 'N') {
                    break;
                }
                direction = 'S';
                break;
            case R.id.buttonLeft:
                if(direction == 'E') {
                    break;
                }
                direction = 'W';
                break;
        }
    }

如何查看视图实际移动的方向?将之前的值保存在单独的变量中不起作用,因为您可以非常快速地按下按钮,并且变量的值将没有正确的值。

我已经尝试为postdelayed()添加一个onClick()的处理程序,但这个处理程序也不起作用。

1 个答案:

答案 0 :(得分:4)

诀窍是在实际的move()方法中保存先前的移动方向。因此,您的move()方法可能如下所示:

public void move() {
    switch(direction) {
        case 'N': if (lastDirection != 'S') moveUp();
            break;
        ...
    }
    lastDirection = direction;
}

哦,请为方向创建一个Enum。你会发现它比Chars好得多。