ONE Goal ,ONE Passion!
关于自定义View的分类一般有很多种分类: 不过大多数人认为可以分为4种比较合适;
这种控件完全有自己定义,一般实现一些特殊的效果,这种效果不是和容易使用组合控件实现.控件的形状需要通过绘制的方式来完成.采用这种方式需要注意:
a,自己支持wrap_content.
b,padding要自己处理
这种方法比较常见,一般用于拓展某种已有view的功能,比如textview,实现起来比较容易,这种方法不需要我们去支持wrap_content和padding.
这种方式主要用于实现自定义的新布局,将定义好的布局当成系统中的LinearLayout等布局一样使用.当某种效果看起来像几种View组合在一起的时候,可以使用这种方法.采用这种方法稍微复杂,需要合适地处理VIewGroup的测量,布局这两个过程.并同时处理子view的测量和布局,
这种方法比较常见,当某种效果像是几个view组合起来的时候可以使用这种布局来实现.采用这种方法我们不需要处理ViewGroup的测量和布局这两个过程.这种方法和方法3类似.一般来说.3可以实现的布局.这种方法都可以实现.
1,让View支持wrap_content
由于直接继承View或ViewGroup的控件,如果不在onMeasure()中对wrap_content做处理,那么当xml中使用该布局并在该布局中使用wrap_content属性时无法达到效果
2,让View支持padding属性
直接继承View的控件,如果不在OnDraw()方法中出来padding,那么padding是无法起到作用的, 另外.直接继承ViewGroup的控件需要在OnMeasure()和OnLayout()中考虑padding和子view的margin对起造成的影响.不然会导致padding和margin无效.
3,view带有滑动嵌套时要处理滑动冲突
这就要熟悉事件的分发机制了.