自定义View,也可以称为自定义控件,通过自定义View可以使得控件实现各种定制的效果。

  实现自定义View,需要掌握View的底层工作原理,比如View的测量过程、布局流程以及绘制流程,除此之外,还需要掌握View常见的回调方法。而对于那些具有滑动效果的自定义View,我们还需要处理View的滑动,如果遇到滑动冲突则需要处理相应的滑动冲突。

  下面是View的常见回调方法:

  • 构造方法

  • onAttach

  • onVisibilityChanged

  • onDetach

  • onFinishInflate

  • onSizeChanged

  • onMeasure

  • onLayout

  • onTouchEvent

  自定义控件的实现手段可简要分为四种类:

  • 继承View重写onDraw方法,这种方法主要是用于实现一些不规则的效果,采用这种方式需要自己支持wrap_content,并且处理padding。

  • 继承ViewGroup派生特殊的Layout,这种方法主要是用于实现自定义的布局,当某种效果看起来像是几个View组合在一起时,可以采用这种方法来实现。采用这种方法是需要合理处理ViewGroup的测量和布局这两个过程,并同时处理子元素的测量和布局过程。

  • 继承特定的View,用于拓展已有的View的功能。

  • 继承特定的ViewGroup(如LinearLayout、RelativeLayout),其适用情形和方法2 类似。

  在自定义View中需要的注意点:

  应当遵守Android标准控件的规范(如命名、可配置、事件处理、状态保存及恢复等)

  • 命名表意明确

  • 控件属性可以在XML中配置

  • 让View支持wrap_content和padding(下文会具体讲到)

  • 在View中尽量不使用Handler,因为View中自带post系列的方法。

  • 自定义View的内存泄漏问题(如果有线程或者动画,需要及时停止)

  • View的滑动冲突(在View带有滑动嵌套的情形,需要处理好滑动冲突)

  • 具有一定的交互性,如按下、点击等

  • 自定义View内部实现状态保存和恢复的机制

  • 兼容性

网友评论