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 
瞭解了這個,我們就可以在項目中針對具體情況使用了
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章