通過源碼查看: View – dispatchTouchEvent方法中
可以看出:
onTouchListener的接口的優先級是要高於onTouchEvent的,假若onTouchListener中的onTouch方法返回true,
表示此次事件已經被消費了,那onTouchEvent是接收不到消息的。
那麼思考:
如果給一個Button設置一個onTouchListener並且重寫onTouch方法,返回值爲true,
此時的Button的點擊事件還處理嗎?
答案是:
是得不到處理的。
由於Button的performClick是利用onTouchEvent實現,假若onTouchEvent沒有被調用到,那麼Button的Click事件也無法響應。
這裏可以查看源碼:
View – onTouchEvent方法,來說明
總結:
onTouchListener的onTouch方法優先級比onTouchEvent高,會先觸發。
假如onTouch方法返回false會接着觸發onTouchEvent,反之onTouchEvent方法不會被調用。
內置諸如click事件的實現等等都基於onTouchEvent,假如onTouch返回true,這些事件將不會被觸發。
順序爲:
onTouch—–>onTouchEvent—>onclick
瞭解了這個,我們就可以在項目中針對具體情況使用了