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

标签 java android

我有 4 个按钮可以改变 View 的移动方向(上、右、下、左)。 运动是这样称呼的:

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

如果之前的方向相反,我想阻止用户改变方向。但是在我的应用程序中,当您向右移动以向上按然后非常快地向左移动时,可能会导致 View 向左移动。在这种情况下,期望的行为是 View 向上移动而不是向左移动。

这就是 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;
        }
    }

如何检查 View 实际移动的方向?将先前的值保存在单独的变量中是行不通的,因为您只需非常快速地按下按钮,变量的值就不会是正确的值。

我已经尝试为 onClick() 添加一个带有 postdelayed() 的处理程序,但也没有用。

最佳答案

诀窍是在实际的move() 方法中保存之前的移动方向。所以你的 move() 方法看起来像:

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

哦,请为方向创建一个枚举。您会发现它比 Chars 好用得多。

关于java - 如果之前单击了另一个按钮,如何防止 onClick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43505161/

相关文章:

android - 重复的zip条目:android/support/v4/media/VolumeProviderCompat $ ControlType

android - 同时进行应用程序到电话的调用 (Android)

java - 如何从 Android 应用程序中的另一个类调用非静态方法

java - Android 应用程序不幸的是应用程序已停止

java - 用于 Windows 上单元测试的嵌入式 FTP 服务器 : FileUpload 551 error

java - 什么是NullPointerException,我该如何解决?

java - EditText OnClickListener 需要两次点击才能工作

java - 我可以依靠垃圾收集器来停止 AsyncTask 吗?

Java Opencv 3.4.2 如何从 Mat 对象中提取不同的 channel ?

java - 绑定(bind)到线程 [main] 的键 [org.hibernate.internal.SessionFactoryImpl] 没有值