1 继承view重写onDraw方法
适用范围:实现一些不规则的效果
特点:需要自己实现padding与warp_content效果
注意:xml文件中定义的属性都是canvas(画布)的属性,画布内容中的属性需要我们在onDraw中计算的得到(即画布属性与内容 属性相关联)
2继承ViewGroup派生出的特殊Layout
使用范围:实现自定义布局,当某种效果看起来像几种view组合在一起的时候,可以采用这种方法来实现。
特点:较为复杂,需要合理的处理viewgroup及其子元素的measure与layout过程;padding属性需要自己实现
3 继承特定的view(例如TextView)。
使用范围:扩展已知某种view的功能,较易实现,不需要自己支持wrap_content和padding等
注意:需要加上super.onDraw(canvas)才能拥有父类控件的一些特性。例如,继承TextView的控件需要 super.onDraw(canvas),text中的内容才会显示;没有用就不会显示。
4 继承特定的VIewGroup(例如LinearLayout)
使用范围:同2,一般来说,2所能实现的效果4都能实现,只是2更接近view的底层。
特点:测量与布局不需要我们实现,在构造方法中需要动态加载一个布局。