Android自定義view中,onDraw和onLayout對比
在Android的各個view中,要想顯示出來就必須經過測量,佈局和繪製這幾個過程
onMeasure
onMeasure的作用是測量控制元件的大小,當我們建立一個View(呼叫構造方法)的時候其實是不需要測量控制元件的大小,只有將這個view放入一個父控制元件中的時候才需要測量,而這個測量方法就是父控制元件喚起呼叫的。當控制元件的父控制元件要放置該控制元件的時候,父控制元件會呼叫子控制元件的onMeasure方法詢問子控制元件的大小,這並不是本篇文章的主角,因為onMeasure在自定義view中是永遠無法避免的,也不是最佔資源的
onLayout
onLayout實際上比onMeasure要簡單的多了,它的作用就是決定和改變控制元件的位置,因為不是所有的控制元件都需要預設的位置(左上角)或者直接match_parent,這個時候onLayout的作用就出來了,就是佈局
onDraw
說完測繪,說完佈局,就要說說最重要的一點,那就是繪製onDraw——繪製view,它的作用是將自定義View畫出,它的大致步驟可以分為
- 繪製背景
- 繪製自己的內容(onDraw())
- 繪製子view(dispatchDraw())
-
繪製裝飾
而在draw裡面,也可以設定控制元件的位置,因為它是透過畫筆畫出來的,既然是透過
canvas?.drawBitmap(bitmap, src, dst, paint)
那就理所應當的可以設定位置,對於需要繪製的控制元件較少的自定義view來說,其實是差別不大,但是在我之前的一個專案中,需要繪製大概接近100個控制元件,這個時候如果還是採用postInvalidate來重新呼叫onDraw,就非常的消耗效能
這是我收集到不同佈局的資料,單位為毫秒(ms),可以看到,在相同佈局下,onDraw所耗時比onLayout要多上許多,同樣的消耗資源也要多上許多,這就導致了較為嚴重的卡頓,也就是說,在我們不改變佈局的樣式大小的情況下,只是修改其位置,直接透過屬性動畫改變其layout中的值,其實會帶來更好的體驗
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69917874/viewspace-2765313/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 自定義View onLayout篇View
- Android自定義View:View(二)AndroidView
- Android 自定義viewAndroidView
- Android: 自定義ViewAndroidView
- Android自定義View整合AndroidView
- Android自定義view-自繪ViewAndroidView
- android自定義view(自定義數字鍵盤)AndroidView
- android自定義View&自定義ViewGroup(下)AndroidView
- android自定義View&自定義ViewGroup(上)AndroidView
- Android自定義View 百分比進度動畫AndroidView動畫
- 重拾Android自定義ViewAndroidView
- Android自定義view詳解AndroidView
- Android 自定義 view 詳解AndroidView
- Android自定義View(1):對話方塊-DialogAndroidView
- CoreText進階(七) 新增自定義View和對其View
- Android自定義View之Window、ViewRootImpl和View的三大流程AndroidView
- Android自定義View播放Gif動畫AndroidView動畫
- Android 自定義View基礎(一)AndroidView
- Android自定義View:ViewGroup(三)AndroidView
- android自定義View——座標系AndroidView
- Android自定義View之捲尺AndroidView
- Android 自定義View之下雨動畫AndroidView動畫
- Android自定義View之分貝儀AndroidView
- Android自定義View注意事項AndroidView
- Android自定義View 水波氣泡AndroidView
- Android 自定義View 字型變色AndroidView
- Android 自定義View 點贊效果AndroidView
- Android自定義View-卷軸AndroidView
- Android自定義View 屬性新增AndroidView
- [原] Android 自定義View步驟AndroidView
- Android 自定義View:深入理解自定義屬性(七)AndroidView
- Android自定義View之requestLayout方法和invalidate方法AndroidView
- Android自定義View之Paint繪製文字和線AndroidViewAI
- 自定義VIEWView
- Android 控制元件框架、View的分發機制和自定義ViewAndroid控制元件框架View
- Android自定義View:MeasureSpec的真正意義與View大小控制AndroidView
- Android 自定義 View 最少必要知識AndroidView
- Android 自定義 View 實戰之 PuzzleViewAndroidView