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
相關文章
- WordPress安裝簡要說明
- SQL%ROWCOUNT的簡要說明SQL
- Object TreeView簡要說明 (轉)ObjectView
- 簡要的CKeditor使用說明
- Goldengate引數簡要說明Go
- 你真的瞭解Android ViewGroup的draw和onDraw的呼叫時機嗎AndroidView
- 推送mobi至Kindle流程說明(簡要操作)
- 蜻蜓安全工作臺程式編排簡要說明
- nagios 監控windows環境簡要說明iOSWindows
- 2020年蘋果開發者證書配置簡要說明蘋果
- 奈雪的茶IPO招股說明書及簡要資料
- ADO.NET三個核心物件的簡要說明物件
- Android中invalidateAndroid
- Revit Server的注意要配置說明Server
- 簡要說明jquery+jcrop實現的圖片裁剪儲存jQuery
- 將本地專案上傳至GitHub上的簡要操作說明Github
- CentOS 7升級核心簡明說明CentOS
- pureftpd安裝配置簡明說明 (轉)FTP
- sqlmap簡單中文說明SQL
- Windows8中108個執行命令及簡要說明Windows
- oracle jdbc jar 的一些說明OracleJDBCJAR
- Android Jetpack - Fragment官方說明AndroidJetpackFragment
- android混淆檔案說明Android
- jarsigner 簡單使用說明JAR
- JavaScript字串api簡單說明JavaScript字串API
- Emacs簡易操作說明(轉)Mac
- VI 命令簡易使用說明
- 對Mysql中的read_only 只讀屬性做簡要說明MySql
- 一些網路協議的說明協議
- 簡要說明,實時資料分析將面臨哪些問題和挑戰?
- 過等保流程簡單說明
- 【LVS】簡介與說明
- JavaScript陣列api簡單說明JavaScript陣列API
- spring aop expression簡單說明SpringExpress
- oracle 常用檢視 簡短說明Oracle
- OGG工作原理及一些配置說明
- rac後臺程式說明及一些概念
- [Android開源框架]RxHttp使用說明Android框架HTTP