🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#### 4.4.1 自定义View的分类 自定义View的分类标准不唯一,而笔者则把自定义View分为4类。 * 1.继承View重写onDraw方法 这种方法主要用于实现一些不规则的效果,即这种效果不方便通过布局的组合方式来达到,往往需要静态或者动态地显示一些不规则的图形。很显然这需要通过绘制的方式来实现,即重写onDraw方法。采用这种方式需要自己支持wrap_content,并且padding也需要自己处理。 * 2.继承ViewGroup派生特殊的Layout 这种方法主要用于实现自定义的布局,即除了LinearLayout、RelativeLayout、FrameLayout这几种系统的布局之外,我们重新定义一种新布局,当某种效果看起来很像几种View组合在一起的时候,可以采用这种方法来实现。采用这种方式稍微复杂一些,需要合适地处理ViewGroup的测量、布局这两个过程,并同时处理子元素的测量和布局过程。 * 3.继承特定的View(比如TextView) 这种方法比较常见,一般是用于扩展某种已有的View的功能,比如TextView,这种方法比较容易实现。这种方法不需要自己支持wrap_content和padding等。 * 4.继承特定的ViewGroup(比如LinearLayout) 这种方法也比较常见,当某种效果看起来很像几种View组合在一起的时候,可以采用这种方法来实现。采用这种方法不需要自己处理ViewGroup的测量和布局这两个过程。需要注意这种方法和方法2的区别,一般来说方法2能实现的效果方法4也都能实现,两者的主要差别在于方法2更接近View的底层。 上面介绍了自定义View的4种方式,读者可以仔细体会一下,是不是的确可以这么划分?但是这里要说的是,自定义View讲究的是灵活性,一种效果可能多种方法都可以实现,我们需要做的就是找到一种代价最小、最高效的方法去实现,在4.4.2节会列举一些自定义View过程中常见的注意事项。