事件分發機制

轉自(https://blog.csdn.net/qq_36523667/article/details/79242952

1. dispatchTouchEvent是處理觸摸事件分發,Android中所有的事件都必須經過這個方法的分發,然後決定是自身消費當前事件還是繼續往下分發給子控件處理。返回true表示不繼續分發,事件沒有被消費。返回false則繼續往下分發,如果是ViewGroup則分發給onInterceptTouchEvent進行判斷是否攔截該事件,事件(多數情況)是從Activity的dispatchTouchEvent開始的。執行dispatchTouchEvent(ev),事件向下分發。

 

2. onInterceptTouchEvent是ViewGroup中才有的方法,View中沒有,它的作用是負責事件的攔截,返回true的時候表示攔截當前事件,不繼續往下分發,交給自身的onTouchEvent進行處理。返回false則不攔截,繼續往下傳。這是ViewGroup特有的方法,因爲ViewGroup中可能還有子View,而在Android中View中是不能再包含子View的(iOS可以)

 

3. onTouchEvent是View中提供的方法,ViewGroup也有這個方法,view中不提供onInterceptTouchEvent。view中默認返回true,表示消費了這個事件,onTouchEvent方法用於事件的處理,返回true表示消費處理當前事件,返回false則不處理,交給子控件進行繼續分發。

 

知識點:

1.Android中事件傳遞按照從上到下進行層級傳遞,事件處理從Activity開始到ViewGroup再到View。

 

2.事件傳遞方法包括dispatchTouchEvent、onTouchEvent、onInterceptTouchEvent,其中前兩個是View和ViewGroup都有的,最後一個是隻有ViewGroup纔有的方法。這三個方法的作用分別是負責事件分發、事件處理、事件攔截。

 

3.onTouch事件要先於onClick事件執行,onTouch在事件分發方法dispatchTouchEvent中調用,而onClick在事件處理方法onTouchEvent中被調用,onTouchEvent要後於dispatchTouchEvent方法的調用。

轉自(https://blog.csdn.net/lijinshan_ybn/article/details/52027019

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