Android TouchEvent分發

近期做一個拖拽的項目,需要實現listView的單擊效果,滑動效果以及長按時的拖拽效果。這裏主要需要考慮Android中的TouchEvent事件分發處理。

事件分發

如圖所示,當listView調用onInterceptTouchEvent函數處理完後,若返回false,該事件將繼續往子View分發,如果返回
true,不再向子view分發,直接調用本級的onTouchEvent方法。同樣,在子調用onTouchEvent方法時,如果返回false,表明
子不消費該事件,後續的move事件和up事件子都不會接收,全部交給父處理;如果子返回true,表明子消耗該事件,父只能收到
dispatchTouchEvent事件和onInterceptTouchEvent事件,收不到onTouchEvent事件。

另外,TouchEvent和OnClick的相應事件順序爲ACTION_DOWN->ACTION_MOVE->OnLongClick->ACTION_UP->OnClick。
listview和gridview,默認子item只能收到action_down事件,收不到action_move和action_up事件,因爲listview要響應自己的onTouchEvent,打印log可以發現,子item的onTouchEvent事件返回了false,onTouchEvent事件交由上層處理,如果需要子item響應,只需要設置子item可以點擊即可,但是此時子item可以處理onTouchEvent事件,父就收不到響應事件了。

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