onClick onTouch onTouchEvent呼叫順序
阿新 • • 發佈:2018-11-21
通過原始碼檢視: 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
瞭解了這個,我們就可以在專案中針對具體情況使用了