View的工作流程主要指的是measure、Layout娶耍、draw三個流程,即測量饼酿、布局榕酒、繪制。measure測量view的寬高故俐,Layout確定view的寬高和四個頂點想鹰,draw繪制到屏幕上。
自定義View答題分為四類:
1药版、繼承View重寫onDraw方法
這種方法主要自定義一些不規(guī)則的效果辑舷,即這種效果不方便通過布局的組合方式實現(xiàn),用這種方式需要自己支持wrap_content槽片,并且支持padding也需要自己處理
2何缓、繼承ViewGroup派生出特殊的Layout
這種方法主要用于實現(xiàn)特殊的布局,即除了LinearLayout还栓、RelativeLayout碌廓、FrameLayout這幾種系統(tǒng)布局之外,我們重新定義的一種新布局剩盒。采用這種方式比較復雜一些谷婆,需要適當測處理vIewGroup的量值和布局這兩個過程并同時處理子元素的測量和布局過程。
3辽聊、繼承特定的view(比如TextView)
這種比較常見纪挎,一般用于擴展某種已有的View功能比如TextView,這種方法比較容易實現(xiàn)跟匆,也不需要自己支持warp_content和padding等异袄。
4、繼承特定的ViewGroup(比如 LinearLayout)
這種方法比較常見玛臂,當某種效果看起來像幾種View組合在一起的時候可以采用這種方式來實現(xiàn)隙轻。采用這種方式不需要自己處理ViewGroup的測量和布局這兩個過程,一般方式2能實現(xiàn)的效果這個方式都能實現(xiàn)垢揩,兩者的區(qū)別在于方式2更接近View底層玖绿。