上一篇,我們大體理解了分發(fā)的過程
理解了在 dispatchTouchEvent 和 onTouchEvent 的過程中 對應(yīng)的順序
還有 View 和 ViewGroup 的區(qū)別
具體代碼可以見https://github.com/2954722256/demo_event
這里 我們給上一篇的2個(gè)例子,
只是在MainActivity中,
分別給2個(gè)控件, 添加上OnClick 和 OnTouch 事件
【EventButton】

點(diǎn)擊 自定義的EventButton
可以發(fā)現(xiàn)對應(yīng)的過程
MainActivity ---- dispatchTouchEvent ----> ACTION_DOWN ----> noMsg
EventButton ---- dispatchTouchEvent ----> ACTION_DOWN ----> noMsg
MainActivity ---- btn setOnTouchListener onTouch ----> ACTION_DOWN ----> noMsg
EventButton ---- onTouchEvent ----> ACTION_DOWN ----> noMsg
MainActivity ---- btn setOnClickListener onClick ----> nullEvent ----> noMsg
我們可以發(fā)現(xiàn),和前面一樣
從MainActivity分發(fā)下來事件
只是 先觸發(fā) OnTouch 的事件(對外的,對開發(fā)者的), 再 獲取到OnTouchEvent事件(系統(tǒng)的,消費(fèi)) , 再觸發(fā) OnClick 事件
我們可以理解成, 點(diǎn)擊事件從最外層分發(fā)下來, 先觸發(fā) TouchListener回調(diào)接口, 系統(tǒng)獲得處理OnTouch事件, 判斷是否消費(fèi), 判斷是Click事件, 再觸發(fā) ClickListener回調(diào)接口
【EventViewGroup】:

點(diǎn)擊 自定義ViewGroup的 EventViewGroup 后
可以發(fā)現(xiàn)
MainActivity ---- dispatchTouchEvent ----> ACTION_DOWN ----> noMsg
EventViewGroup ---- dispatchTouchEvent ----> ACTION_DOWN ----> noMsg
MainActivity ---- LL setOnTouchListener onTouch ----> ACTION_DOWN ----> noMsg
EventViewGroup ---- onTouchEvent ----> ACTION_DOWN ----> noMsg
MainActivity ---- LL setOnClickListener onClick ----> nullEvent ----> noMsg
我們可以發(fā)現(xiàn),和前面Button一樣
先觸發(fā) OnTouch 的事件(對外的,對開發(fā)者的), 再 獲取到OnTouchEvent事件(系統(tǒng)的,消費(fèi)) , 再觸發(fā) OnClick 事件
只是, ViewGroup沒有調(diào)用最外面Activity的OnTouchEvent方法了
** 可以理解成,這里消費(fèi)掉了點(diǎn)擊, 就不用調(diào)用上層的 OnTouch方法了 **
簡單回顧
簡單看了下對應(yīng)的點(diǎn)擊后的區(qū)別
我們簡單對比一下
