2012-11-16 59 views
3

我玩Android上一场比赛,我有一个函数MoveCharacter(INT方向)移动时按下按钮安卓:如何当按钮被按下

例如动画精灵,当用户知道直逼我有这样的代码:

mControls.UpButton.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mLevel.mCharAnimation.FrameUp(); 
      }   
     }); 

不过,我希望能够保持,只要用户保持按钮向下移动的字符。令人惊讶的是,我还没有发现如何在Android中做到这一点。 是否有某种onButtonDownLister?

回答

17

您需要使用OnTouchListener才能针对向下,向上和其他状态分别执行操作。

mControls.UpButton.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     switch(event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      // Do something 
      return true; 
     case MotionEvent.ACTION_UP: 
      // No longer down 
      return true; 
     } 
     return false; 
    } 
}); 
+0

这真的没有回答这个问题。如果用户将他的手指滑离按钮,ACTION_UP从不会被调用。 – quemeful

+5

@quemeful,如果你发布了一个解决方案_does_回答这个问题,会不会很好。由于您的评论实际上引导我测试该场景,因此我发现正确的答案是也测试'MotionEvent.ACTION_CANCEL'并执行与action_up相同的操作。 –

0

你想要onTouchListener()。基本上,这可以让你看到对象被触摸的时间,看看用户如何移动他们的手指,并知道什么时候放开。

0

您可以使用OnTouchListener代替

mControls.UpButton.setOnTouchListener(new OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 

       switch (event.getAction() & MotionEvent.ACTION_MASK) { 
       case MotionEvent.ACTION_DOWN: 
        mLevel.mCharAnimation.FrameUp(); 
        break; 
       case MotionEvent.ACTION_UP: 
        // User released the button, do your stuff here 
        break; 
       } 
       return false; 

      }   
     }); 
0

正如加里·朴的评论中提到,你会想,如果检测用户拖动手指的按键之外还。

mButton.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     switch(event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       // Pressed down 
       return true; 
      case MotionEvent.ACTION_UP: 
       // Released 
       return true; 
      case MotionEvent.ACTION_CANCEL: 
       // Released - Dragged finger outside 
       return true; 
     } 
     return false; 
    } 
});