2011-04-23 61 views
20

我试图捕获Android中的TouchRelease事件。我看到event.getAction()返回操作类型。但是在onTouchEvent里面总是给出动作ACTION_DOWN
你知道如何捕捉触摸释放事件。Android中的触摸发布方法

public boolean onTouchEvent(MotionEvent event) { 
    Log.d(TAG,""+event.getAction()); 
    return super.onTouchEvent(event); 
} 

回答

56

你有ACTION_UPhttp://developer.android.com/reference/android/view/MotionEvent.html#ACTION_UP

View view = new View(); 

view.setOnTouchListener(new OnTouchListener() { 
    public boolean onTouch(View view, MotionEvent event) { 
    if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) { 
     Log.d("TouchTest", "Touch down"); 
    } else if (event.getAction() == android.view.MotionEvent.ACTION_UP) { 
     Log.d("TouchTest", "Touch up"); 
    } 
    return true; 
    } 
} 
+4

考虑还评估'ACTION_CANCEL' – Aleadam 2011-04-23 18:03:52

+0

我看到有一些东西叫做ACTION_UP。但是从上面给出的方法来看,它从不触发ACTION_UP状态。你知道任何其他方法来获得吗? – dinesh707 2011-04-23 18:04:58

+3

'ACTION_UP'是正确的'MotionEvent'。也许事件被其他观点所消耗? – Aleadam 2011-04-23 18:24:28

7
public boolean onTouchEvent(MotionEvent event) { 
     Log.d(TAG,""+event.getAction()); 
     return true; // Required for recieving subsequent events (ACTION_MOVE, ACTION_UP) 
} 
1

我有同样的问题SurfaceView类。以下是我如何修复它:启用视图的可长时间点击属性(通过setLongClickable(true))后,它应该起作用。

+0

酷从我的烦恼中拯救了我! – Reek 2017-01-12 16:00:50

0
view.setOnTouchListener(new OnTouchListener() { 
    public boolean onTouch(View view, MotionEvent event) { 
     if(event.getAction() == MotionEvent.ACTION_UP) { 
      // release 
      return false; 
     } else if(event.getAction() == MotionEvent.ACTION_DOWN) { 
      // pressed 
      return true; 
     } 
     return super.onTouchEvent(event); 
    }