1.繼承View重寫onDraw方法:
這種方法主要用于實現(xiàn)一些不規(guī)則的效果,即這種效果不方便通過布局的組合方式來達到,往往需要靜態(tài)或動態(tài)地顯示一些不規(guī)則的圖形。很顯然這需要通過繪制的方式來實現(xiàn),即重寫onDraw方法。采用這種方式需要自己支持wrap_content,并且padding也需要自己處理。
2.繼承ViewGroup派生特殊的Layout:
這種方法主要用于實現(xiàn)自定義的布局,即除了LinearLayout、RelativeLayout、FrameLayout這幾種系統(tǒng)的布局之外,我們重新定義一種新的布局,當某種效果看起來很像幾種View組合在一起的時候可以采用這種方式實現(xiàn)。采用這種方式需要合適的處理ViewGroup的測量、布局、這兩個過程,并同時處理子元素的測量和布局過程。
3.繼承特定的View( 比如TextView):
這種方法比較常見,一般是用于擴展已有View的功能,比如TextView,這種方法比較容易實現(xiàn)。這種方法不再需要自己支持wrap_content和padding等。
4.繼承特定的ViewGroup(比如LinearLayout):
這種方法也比較常見,當某種效果看起來很像幾種VIew'組合在一起的時候,可以采用這種方法來實現(xiàn)。采用這種方法不需要自己處理Viewgroup的測量和布局這兩個過程。需要注意這鐘方法和方法2的區(qū)別,一般來說方法2能實現(xiàn)的方法4也都能實現(xiàn),兩者主要的區(qū)別在于方法2更接近View的底層。