gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:36:49 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com