1、onInterceptTouchEvent
是在ViewGroup裏面定義的。Android中的layout佈局類一般都是繼承此類的。onInterceptTouchEvent是用於攔截手勢事件的,每個手勢事件都會先調用onInterceptTouchEvent。
1. down事件首先會傳遞到onInterceptTouchEvent()方法
2. 如果該ViewGroup的onInterceptTouchEvent()在接收到down事件處理完成之後return false,那麼後續的move, up等事件將繼續會先傳遞給該ViewGroup,之後才和down事件一樣傳遞給最終的目標view的onTouchEvent()處理。
3. 如果該ViewGroup的onInterceptTouchEvent()在接收到down事件處理完成之後return true,那麼後續的move, up等事件將不再傳遞給onInterceptTouchEvent(),而是和down事件一樣傳遞給該ViewGroup的onTouchEvent()處理,注意,目標view將接收不到任何事件。
4. 如果最終需要處理事件的view的onTouchEvent()返回了false,那麼該事件將被傳遞至其上一層次的view的onTouchEvent()處理。
5. 如果最終需要處理事件的view 的onTouchEvent()返回了true,那麼後續事件將可以繼續傳遞給該view的onTouchEvent()處理。
2、onTouchEvent:
onTouchEvent同樣也是在view中定義的一個方法。處理傳遞到view 的手勢事件。手勢事件類型包括ACTION_DOWN,ACTION_MOVE,ACTION_UP,ACTION_CANCEL等事件。
其中Layout裏的onInterceptTouchEvent默認返回值是false,這樣touch事件會傳遞到View控件,Layout裏的onTouch默認返回值是false, View裏的onTouch默認返回值是true,當我們手指點擊屏幕時候,先調用ACTION_DOWN事件,當onTouch裏返回值是true的時候,onTouch回繼續調用ACTION_UP事件,如果onTouch裏返回值是false,那麼onTouch只會調用ACTION_DOWN而不調用ACTION_UP.
3、當onInterceptTouchEvent返回true 時,事件傳遞給 ViewGroup的onTouchEvent:
處理,當onTouchEvent 返回true時,消耗 這次事件。
4、自定義滑動GroupView(FlingLayout) 中的 onInterceptTouchEvent 方法,用於捕獲滑動操作,當滑動距離 (mLastMotionX - getX()) >getScaledTouchSlop()時視爲要滑動視圖, 返回TRUE,將事件傳遞到 ViewGroup的 onTouch方法。
5、onTouch方法,處理 滑動時view的偏移(滾動), 並處理 up事件時,通過最後速度判斷是否翻頁。