android開發藝術探索
1.View有兩個方法用來響應使用者的觸控事件,dispatchTouchEvent()和onTouchEvent().因為View本身就是一個觸控事件的最後響應Target,所以它沒有ViewGroup的onInterceptTouchEvent()方法。(順便提一下ViewGroup的onInterceptTouchEvent()方法,預設都是返回false,不攔截事件).
2.那麼,View中OnClickListener的onClick方法什麼時候被呼叫?我們先從View分發事件的dispatchTouchEvent方法看,
接著看22行到33行的一段邏輯,發現onTouchEvent()方法是在dispatchTouchEvent()方法中呼叫的,在第27行用到了OnTouchListener的onTouch()方法的返回值,而在第30行呼叫了onTouchEvent()方法,可以看出onTouch方法的返回值直接決定result的值,而result的值又決定了onTouchEvent方法是否會執行。從而得到結論:onTouch()必須方法返回true的時候,result才能為true,而在result為true的時候onTouchEvent方法是不會執行的,onTouch方法返回false的時候,result肯定是false,這個時候onTouchEvent方法才會執行。
2.然後再來看onTouchEvent()方法:
可以看到在在使用者將手指離開螢幕的時候,也就是ACTION_UP的邏輯當中進行了一系列判斷操作,最終呼叫了一個performClick()方法,看下這個方法程式碼:
看下注釋: Call the View's OnClickListener, if it is defined. 解釋的多好。明確的在裡面呼叫了OnClickListener的OnClick()方法。其實在自己程式碼中也可以直接呼叫這個方法來模擬一次View的點選事件。
至此,View的OnClickListener方法呼叫流程基本明確了,就是在OnTouchEvent方法中的ACTION_UP中,呼叫了OnClick方法,需要注意的是:如果View設定了OnTouchListener並且在onTouch方法返回true,那麼onTouchEvent方法不會執行,onClick方法也不會被呼叫。
問:那麼還有別的地方會呼叫onClickListener的onClick()方法嗎?
答:有!
全域性搜尋一下,還有一個callOnclick方法也呼叫了onClick()方法,但是這個方法並沒有在事件的分發過程中被呼叫,不作考慮。
相關文章
- 《Android開發藝術探索》——View事件分發機制AndroidView事件
- 《Android藝術開發探索》學習筆記之IPCAndroid筆記
- Android開發藝術探索 第7章 動畫深入分析Android動畫
- 《Android藝術開發探索》學習筆記之View的工作原理Android筆記View
- 書海拾貝|開發藝術探索之 android 的訊息機制Android
- 《Android藝術開發探索》學習筆記之Activity的生命週期Android筆記
- [Android開發藝術探索閱讀筆記]第15章 效能優化Android筆記優化
- 《Android藝術開發探索》學習筆記之View的事件體系(一)Android筆記View事件
- Android 開發藝術探索筆記之一 -- Android 的生命週期和啟動模式Android筆記模式
- Android開發藝術(3)——View的工作原理AndroidView
- 《Android藝術開發探索》學習筆記之View的事件體系(View的滑動)Android筆記View事件
- 《Android藝術開發探索》學習筆記之View的事件體系(滑動衝突)Android筆記View事件
- Android開發藝術(2)——View的事件體系AndroidView事件
- 《Android藝術開發探索》學習筆記之View的事件體系(View的事件分發機制)Android筆記View事件
- NFT生態藝術開發丨NFT數藏藝術丨NFT生態藝術系統開發技術
- 《Android藝術開發探索》學習筆記之View的事件體系(View的彈性滑動)Android筆記View事件
- 非梵藝術NFT數藏開發/系統技術開發/非梵藝術NFT模式模式
- AndroidStudio 建立aidl檔案時的問題,參考資料《Android的開發藝術探索》AndroidAI
- NFT非梵藝術/數藏系統開發/非梵藝術技術開發NFT詳情
- 探索 Android TDD 開發方法Android
- 探索 Android BDD 開發方法Android
- 劍破冰山——Oracle開發藝術Oracle
- TGDC | 探索人臉藝術背後的技術
- Android開發藝術(1)——Activity的生命週期和啟動模式Android模式
- NFT生態藝術開發詳情丨數藏藝術系統開發丨Solidity語言技術Solid
- 開發的藝術,化繁為簡
- 貝塞爾曲線開發的藝術
- 劍破冰山—Oracle開發藝術 序Oracle
- 劍破冰山—Oracle開發藝術 前言Oracle
- 破冰山—Oracle開發藝術 目錄Oracle
- 用藝術的眼光探索資料之美
- 要點提煉|開發藝術之IPC
- 前端開發中的程式碼藝術(精要)前端
- 要點提煉|開發藝術之Window
- 要點提煉|開發藝術之Animation
- 要點提煉|開發藝術之Drawable
- 要點提煉|開發藝術之ViewView
- 要點提煉|開發藝術之 Activity