美文网首页Android开发Android开发Android进阶之路
Android View的工作原理 (三) 自定义View

Android View的工作原理 (三) 自定义View

作者: BlingBest | 来源:发表于2019-01-15 18:45 被阅读6次

    自定义View的分类


    1 继承自View重写onDraw方法:

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

    2 继承ViewGroup派生特殊的layout

    这种方法主要用于实现自定义的布局,即除了LinearLayout,RelativeLayout这几种系统的布局之外,我们重新定义一种新布局,当某种效果看起来很像几种View组合在一起的时候,可以采用这种方法来实现,采用这种方式稍微复杂一些,需要合适的处理ViewGroup的测量,布局这两个过程,并同时处理子元素的测量和布局过程

    3 继承特定的View

    一般用于拓展某种已有的View的功能,这种方法比较容易实现,这种方法不需要自己支持wrap_content和padding等

    4 继承特定的ViewGroup

    当某种效果像几种View组合在一起的时候,可以采用这个方法来实现,采用这种方法不需要自己处理ViewGroup的测量和布局这两个过程。

    自定义View基础

    1 让View支持wrap_content

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

    2 让View支持Padding

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

    3 尽量不要在View种使用Handler

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

    4 View种如果有线程或者动画,需要及时停止,View#onDetachFromWindow

    当包含此View的Activity退出或者当前View被Remove时,View的onDetachFromWindow方法会被调用,和此方法对应的是onAttachToWindow,包含此View的Activity启动时会调用,View变得不可见时也要及时停止线程和动画,否则会造成内存泄漏

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

    自定义View的示例

    1 继承View重写onDraw方法

    基础实现 添加对padding的支持

    添加自定义属性

    2 继承ViewGroup派生特殊的Layout

    主要用于实现自定义的布局,采用这种方式稍微复杂一些,需要合适的处理ViewGroup的测量和布局这两个过程,并同时处理子元素的测量和布局过程

    继承特定的View和继承特定的ViewGroup这两种方式比较简单 。

    自定义View的思想


    首先要掌握基本功,比如View的弹性滑动,滑动冲突,绘制原理等,这些东西都是自定义View所必须的,尤其是那些看起来很炫的自定义View,亚目往往对这些技术点的要求更高;熟练掌握基本功以后,在面对新的自定义View时,要能够对其分类并选择合适的实现思路。

    相关文章

      网友评论

        本文标题:Android View的工作原理 (三) 自定义View

        本文链接:https://www.haomeiwen.com/subject/apwydqtx.html