2011-12-01 89 views
2

我有一个SurfaceView,我想识别MotionEvent的Action_Up,但只触发Action_Down事件。此外,我想识别另一个触摸,而第一个手指仍然在屏幕上,但OnTouch事件不会再次触发。Android触摸问题

@Override 
public boolean onTouch(View arg0, MotionEvent event) { 
    int pointerCount = event.getPointerCount(); 
    if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) { 
     //blabla 
    } else /* if (event.getAction() == android.view.MotionEvent.ACTION_UP) */{ 
     //blabla 
    } 
    return false; 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    int pointerCount = event.getPointerCount(); 
    if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) { 
     //blabla 
    } else /* if (event.getAction() == android.view.MotionEvent.ACTION_UP) */{ 
     //blabla 
    } 
    return super.onTouchEvent(event); 
} 

的pointerCount始终为1,不管有多少手指在屏幕上。

回答

1

您必须在OnTouchListener如果你有兴趣在被通知与触控相关的其余活动(ACTION_MOVEACTION_UP等)的ACTION_DOWN事件返回true

我还建议,要么监测触摸在视图的onTouchEvent方法中使用侦听器或......不能同时使用。

HTH

0

尝试捕捉的getAction在一个变量而不是调用它多次在onTouch。还要确保让听众知道何时消耗该动作。

public boolean onTouch(View v, MotionEvent event) { 
      final int action = event.getAction(); 
      boolean consumed = false; 
      switch(action){ 
        case MotionEvent.ACTION_DOWN: 
        //down stuff logic 
          consumed = true; 
        break; 
        case MotionEvent.ACTION_UP: 
        //up stuff logic 
          consumed = true; 
        break; 
        case MotionEvent.ACTION_MOVE: 
        //move stuff logic 
          consumed = true; 
        break; 
      } 
      return consumed; 
    } 

至于手指在屏幕上的号码,记得多点触控的支持开始在API 5级,所以要根据您的手机/ minSDK你可能没有它。