1. 程式人生 > >onClick onTouch onTouchEvent呼叫順序

onClick onTouch onTouchEvent呼叫順序

通過原始碼檢視: 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 
瞭解了這個,我們就可以在專案中針對具體情況使用了