我有 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/