自定义View

一、自定义View分类

1.继承View重写onDraw方法

这种方法主要用于实现一些不规则的效果,即这种效果不方便过布局的组合方式来达到。往往需要静态或者动态地显示一些不规则的图形,采用这种方式需要自己支持wrap_content,并且padding也需要自己处理。

2.继承ViewGroup派生特殊的La'yout

当效果看起来像几种View组合在一起的时候,可以采用这种方法实现。需要合适地处理ViewGroup的测量,布局这两个过程,并同时处理子元素的测量和布局过程

3.继承特定的View

一般用于扩展某种已有的View的功能,这种方法不需要自己支持wrap_content和padding

4.继承特定的ViewGroup

二、自定义View须知

1.让View支持wrap_content

直接继承View或者ViewGroup的控件,如果不再onMeasure中对wrap_content做特殊处理,那么当外界在布局中使用wrap_content是就无法达到预期的效果‘

2.让View支持padding

如果不在draw方法中处理padding,那么padding属性无法起作用,另外直接继承自ViewGroup的控件需要在onMeasure和onLayout中考虑paddong和子元素的margin对其造成的影响,不然将导致padding和子元素margin失效。

3.尽量不要在View中使用Handle,没必要

因为View本身就提供post系列的方法,完全可以替代Handle的作用

4.View中如果有线程或者动画,需要及时停止,参考View的onDetachedFromWindow

如果线程或者动画需要停止,那么onDetachedFromWindow是一个很好的时机,当包含此View的Activity退出或者当前View被remove时,View的onDetachedFromWindow方法会被调用,和此方法对应的是onAttachedToWindow当包含此View的Activity启动时,View的onAttachedToWindow方法会被调用。同时,当View变得不可见时我们也需要停止线程和动画,如果不及时处理,会造成内存泄漏。

5.View带有滑动嵌套情形时,需要处理好滑冲突


你可能感兴趣的:(自定义View)