Android draw、onDraw、dispatchDraw、invalidate、computeScroll 一些簡要說明
View中:
public void draw(Canvas canvas) {
/*
1. Draw the background 繪製背景
2. If necessary, save the canvas' layers to prepare for fading 如有必要,顏色漸變淡之前儲存畫布層(即鎖定原有的畫布內容)
3. Draw view's content 繪製view的內容
4. Draw children 繪製子view
5. If necessary, draw the fading edges and restore layers 如有必要,繪製顏色漸變淡的邊框,並恢復畫布(即畫布改變的內容附加到原有內容上)
6. Draw decorations (scrollbars for instance) 繪製裝飾,比如滾動條
*/
...
if (!dirtyOpaque) {
drawBackground(canvas); //背景繪製
}
// skip step 2 & 5 if possible (common case) 通常情況跳過第2和第5步
...if (!dirtyOpaque) onDraw(canvas); //呼叫onDraw
dispatchDraw(canvas); //繪製子view
onDrawScrollBars(canvas); //繪製滾動條
...
}
protected void dispatchDraw(Canvas canvas) { //空實現 }
protected void onDraw(Canvas canvas) { //空實現 }
ViewGroup中:
protected void dispatchDraw(Canvas canvas) {
...
drawChild(...); //繪製子view
...
}
protected boolean drawChild(Canvas canvas, View child,long drawingTime) {
return child.draw(canvas, this, drawingTime);
}
說明:
1. 自定義一個view時,重寫onDraw。
呼叫view.invalidate(),會觸發onDraw和computeScroll()。前提是該view被附加在當前視窗上
view.postInvalidate(); //是在非UI執行緒上呼叫的
2. 自定義一個ViewGroup,重寫onDraw。
onDraw可能不會被呼叫,原因是需要先設定一個背景(顏色或圖)。
表示這個group有東西需要繪製了,才會觸發draw,之後是onDraw。
因此,一般直接重寫dispatchDraw來繪製viewGroup
3. 自定義一個ViewGroup
dispatchDraw會呼叫drawChild。
轉自:http://blog.csdn.net/jjwwmlp456/article/details/43986141
相關文章
- Android中invalidateAndroid
- 蜻蜓安全工作臺程式編排簡要說明
- 2020年蘋果開發者證書配置簡要說明蘋果
- 奈雪的茶IPO招股說明書及簡要資料
- Android Jetpack - Fragment官方說明AndroidJetpackFragment
- Revit Server的注意要配置說明Server
- 將本地專案上傳至GitHub上的簡要操作說明Github
- 簡要說明jquery+jcrop實現的圖片裁剪儲存jQuery
- CentOS 7升級核心簡明說明CentOS
- jarsigner 簡單使用說明JAR
- OpenGrok簡單使用說明
- 【LVS】簡介與說明
- 對Mysql中的read_only 只讀屬性做簡要說明MySql
- Android自定義view中,onDraw和onLayout對比AndroidView
- [Android開源框架]RxHttp使用說明Android框架HTTP
- RK3399 android編譯說明Android編譯
- eachdemo/rbac 的簡單說明
- makefile中的一些引數說明
- 簡要說明,實時資料分析將面臨哪些問題和挑戰?
- RK3399_Android7.1_MPI_Demo_說 明Android
- GoldenGate BR(bounded Recovery)簡單說明Go
- 過等保流程簡單說明
- Android,你要掌握的一些東西Android
- Android自定義View之requestLayout方法和invalidate方法AndroidView
- Android自定義View之invalidate方法和postInvalidate方法AndroidView
- Android開發 - onDraw透過RectF繪畫矩形(RectF解析)Android
- sift和surf演算法的一些說明演算法
- 【MEMORY】Oracle 共享池堆簡單說明Oracle
- 關於 UiPath Activities 中文手冊的一些說明UI
- Android平臺OpenGL ES/Assimp/OpenCV/GLM整合說明AndroidOpenCV
- 為什麼我們要學習DMAIC?—舉例說明AI
- 說明
- TCP 協議簡單說明【PHP 碼農的現身說法】TCP協議PHP
- Vuejs基本知識(三)【語法簡寫說明】VueJS
- 使用說明
- Hack 說明
- [流媒體]ijkplayer 播放器,android平臺使用說明播放器Android
- 專利說明書及其說明書附圖
- mssql sqlserver updatetext關鍵字應用簡介說明SQLServer