通過源碼查看: View – dispatchTouchEvent方法中
這里寫圖片描述
可以看出:
onTouchListener的接口的優(yōu)先級是要高于onTouchEvent的,假若onTouchListener中的onTouch方法返回true本缠,
表示此次事件已經(jīng)被消費了斥扛,那onTouchEvent是接收不到消息的。
那么思考:
如果給一個Button設(shè)置一個onTouchListener并且重寫onTouch方法,返回值為true,
此時的Button的點擊事件還處理嗎稀颁?
這里寫圖片描述
答案是:
是得不到處理的芬失。
由于Button的performClick是利用onTouchEvent實現(xiàn),假若onTouchEvent沒有被調(diào)用到匾灶,那么Button的Click事件也無法響應(yīng)棱烂。
這里可以查看源碼:
View – onTouchEvent方法,來說明
這里寫圖片描述
總結(jié):
onTouchListener的onTouch方法優(yōu)先級比onTouchEvent高阶女,會先觸發(fā)颊糜。
假如onTouch方法返回false會接著觸發(fā)onTouchEvent,反之onTouchEvent方法不會被調(diào)用秃踩。
內(nèi)置諸如click事件的實現(xiàn)等等都基于onTouchEvent衬鱼,假如onTouch返回true,這些事件將不會被觸發(fā)憔杨。
順序為:
onTouch—–>onTouchEvent—>onclick
了解了這個,我們就可以在項目中針對具體情況使用了