onInterceptTouchEvent 和 onTouchEvent

1、onInterceptTouchEvent

是在ViewGroup裏面定義的。Android中的layout佈局類一般都是繼承此類的。onInterceptTouchEvent是用於攔截手勢事件的,每個手勢事件都會先調用onInterceptTouchEvent 

1.       down事件首先會傳遞到onInterceptTouchEvent()方法

2.       如果該ViewGrouponInterceptTouchEvent()在接收到down事件處理完成之後return false,那麼後續的move, up等事件將繼續會先傳遞給該ViewGroup,之後才和down事件一樣傳遞給最終的目標viewonTouchEvent()處理。

3.       如果該ViewGrouponInterceptTouchEvent()在接收到down事件處理完成之後return true,那麼後續的move, up等事件將不再傳遞給onInterceptTouchEvent(),而是和down事件一樣傳遞給該ViewGrouponTouchEvent()處理,注意,目標view將接收不到任何事件。

4.       如果最終需要處理事件的viewonTouchEvent()返回了false,那麼該事件將被傳遞至其上一層次的viewonTouchEvent()處理。

5.       如果最終需要處理事件的view onTouchEvent()返回了true,那麼後續事件將可以繼續傳遞給該viewonTouchEvent()處理。

2onTouchEvent:

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 時,事件傳遞給 ViewGrouponTouchEvent:

處理,當onTouchEvent 返回true時,消耗 這次事件。

4、自定義滑動GroupView(FlingLayout) 中的 onInterceptTouchEvent 方法,用於捕獲滑動操作,當滑動距離 (mLastMotionX - getX()) >getScaledTouchSlop()時視爲要滑動視圖, 返回TRUE,將事件傳遞到 ViewGroup的 onTouch方法。

5、onTouch方法,處理 滑動時view的偏移(滾動), 並處理 up事件時,通過最後速度判斷是否翻頁。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章