2016-04-27 68 views
0

我知道視圖可以決定在傳遞ACTION_DOWN事件時通過在onTouchEvent中返回true來處理MotionEvent自身。如果他們返回true,那麼他們將收到所有後續的MOVE/UP/CANCEL事件。這工作正常。競爭onTouchEvent處理程序?

我想要做的是將此決定推遲到ACTION_MOVE事件。我有一個包含一個ViewGroup一個孩子,如果不同水平或垂直滾動​​,我想的ViewGroup或兒童負責處理MotionEvents

喜歡的東西:

public class MyViewGroup extends ViewGroup{ 
    public boolean onTouchEvent(MotionEvent event) { 
     int action = event.getActionMasked(); 
     if (action == MotionEvent.ACTION_DOWN) { 
      mDownX = event.getX(); 
     } else if (action == MotionEvent.ACTION_MOVE) { 
      if (Math.abs(event.getX() - mDownX) > THRESHOLD_X) { 
       // I want all the future events to be forwarded to this ViewGroup 
       return true; 
      } 
     } 
     return false; 
    } 
} 

public class MyChild extend View { 
    public boolean onTouchEvent(MotionEvent event) { 
     int action = event.getActionMasked(); 
     if (action == MotionEvent.ACTION_DOWN) { 
      mDownY = event.getY(); 
     } else if (action == MotionEvent.ACTION_MOVE) { 
      if (Math.abs(event.getY() - mDownY) > THRESHOLD_Y) { 
       // I want all the future events to be forwarded to this View 
       return true; 
      } 
     } 
     return false; 
    } 
} 

這可能嗎?目前,只有ViewGroup會收到MOVE/UP/CANCEL。我想是因爲它沒有找到一個合適的孩子來轉發視圖。

回答

0

爲了記錄,我最終通過覆蓋ViewGroup.dispatchTouchEvent()來做到這一點。這有點麻煩但可行。如果需要,我可以分享代碼。