2017-04-19 32 views
1

我有4个按钮,它们改变视图的移动方向(上,右,下,左)。 运动被称为是这样的:如何防止onClick如果另一个按钮被点击之前

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()这不起作用。

回答

4

诀窍是将实际的move()方法中的上一个移动方向保存。所以,你的move()方法可能看起来像:

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

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

+0

非常感谢!这对我有效。它应该是'if(lastDirection!='S')' – sininen

+0

对,是,固定的。 – radoh

相关问题