我有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()
的处理程序,但这个处理程序也不起作用。
答案 0 :(得分:4)
诀窍是在实际的move()
方法中保存先前的移动方向。因此,您的move()
方法可能如下所示:
public void move() {
switch(direction) {
case 'N': if (lastDirection != 'S') moveUp();
break;
...
}
lastDirection = direction;
}
哦,请为方向创建一个Enum。你会发现它比Chars好得多。