深入瞭解View實現原理以及自定義View詳解

yangxi_001發表於2014-07-30

下面幾篇文章對View的原理講的非常詳細.

Android LayoutInflater原理分析,帶你一步步深入瞭解View(一)

Android檢視繪製流程完全解析,帶你一步步深入瞭解View(二)

Android檢視狀態及重繪流程分析,帶你一步步深入瞭解View(三)

Android自定義View的實現方法,帶你一步步深入瞭解View(四)

Android自定義元件開發之onMeasure使用

Android UI 之一步步教你自定義控制元件(自定義屬性、合理設計onMeasure、合理設計onDraw等)

Android中measure過程、WRAP_CONTENT詳解以及xml佈局檔案解析流程淺析(上)

Android中measure過程、WRAP_CONTENT詳解以及xml佈局檔案解析流程淺析(下)

Android中View繪製流程以及invalidate()等相關方法分析

http://stackoverflow.com/questions/7423082/authorative-way-to-override-onmeasure

http://www.cnblogs.com/mkorion/archive/2012/06/28/2567654.html


自定義一個View類,通常可以重寫以下方法

onFinishInflate():

當應用從XML佈局檔案載入該元件並利用它來構建介面之後,該方法被回撥。

onMeasure(int,int):

呼叫該方法來檢測View元件及它所包含的所有子元件的大小。

onLayout(boolean,int,int,int,int): 

當該元件需要分配其子元件的位置,大小時,該方法就會被回撥。

onSizeChanged(int,int,int,int): 

當該元件的大小被改變時回撥該方法。

onDraw(Canvas): 

當該元件將要繪製它的內容時回撥該方法進行繪製。

onKeyDown(int,KeyEvent):

某個鍵被按下。

onKeyUp(int,KeyEvent):

鬆開某個鍵

onTouchEvent(MotionEvent):

 觸屏事件

onWindowFocusChanged(boolean): 

當該元件得到,失去焦點時觸發該方法。

onAttachedToWindow(): 

當該元件放入某個視窗時觸發。onAttachedToWindow是在第一次onDraw前呼叫的。也

就是們寫的View在沒有繪製出來時呼叫的,但只會呼叫一次比如,我們寫狀態列中的時鐘的View,

onAttachedToWindow這方法中做初始化工作,比如註冊一些廣播等

onDetachedFromWindow():

當該元件從某個視窗上分離時觸發。也就是我們銷燬View的時候。我們寫的這個View

不再顯示這時我們就在這個方法做一些收尾工作,比如:取消廣播註冊等等。

onWindowVisibilityChanged(int): 

當包含該元件的視窗的可見性發生改變時觸發。

requestLayout(): 

當view確定自身已經不再適合現有的區域時,該view本身呼叫這個方法要求parent view重新呼叫

他的onMeasure,onLayout來對重新設定自己位置。特別的當view的LayoutParameter發生改變,並且它的值還沒能

應用到view上,這時候適合呼叫這個方法,讓LayoutParam對View起作用。

invalidate(): 

重新整理檢視,相當於呼叫View.onDraw()方法

requestDisallowInterceptTouchEvent(): 

阻止父層的View截獲touch事件,就是呼叫getParent().requestDisallowInterceptTouchEvent(true) 方法。一旦底

層View收到touch的action後呼叫這個方法那麼父層View就不會再呼叫onInterceptTouchEvent了,也無法截獲以後

的action。


相關文章