全文參考https://blog.csdn.net/carson_ho/article/details/54136311 ,只是自己理解整理一次,加深印象
點擊事件相關的四個方法
控件的onTouch方法,這個方法和onTouchEvent不是同一個,要注意區(qū)別
如果onTouch方法return true,那么會走dispatchTouchEvent,不會走自己的onTouchEvent方法,也就不會響應點擊事件
如果onTouch方法 返回 false,會執(zhí)行onTouchEvent 之后點擊事件也會正常執(zhí)行,默認就是false
onTouch在onTouchEvent之前執(zhí)行

image
dispatchTouchEvent() 事件分發(fā)
當按下那一刻,事件會通過dispatchTouchEvent分發(fā)
如果直接設置return true,會調用activity.dispatchTouchEvent(),父布局的onInterceptTouchEvent()也會走,但是不會走父布局的onTouchEvent
如果直接設置return false,會調用父布局的所有流程
無論返回是否true,還是false,都不會走自己的onTouchEvent事件

image
onTouchEvent 事件處理
無論自己設置為return false,或者return true,都不會走自己的onClick,除非是默認,因為不會調用performClick()方法,自己直接設置也可以
如果直接return false,那么就會返回給父布局的onTouchEvent
如果為true那么自己會直接消費掉事件,子控件的點擊事件還是會走,并不會影響子控件
onInterceptTouchEvent 事件攔截
只有ViewGroup有,攔截點擊事件,在自己onTouch之前執(zhí)行,如果為true,調用自己dispatchTouchEvent,onTouch,onTouchEvent 正常流程處理事件,不會傳遞到子view

image
完整的流程圖

image