自定义View的分类详解

自定义View的分类

ONE Goal ,ONE Passion!

关于自定义View的分类一般有很多种分类: 不过大多数人认为可以分为4种比较合适;

第一种: 继承View 重写onDraw()方法:


这种控件完全有自己定义,一般实现一些特殊的效果,这种效果不是和容易使用组合控件实现.控件的形状需要通过绘制的方式来完成.采用这种方式需要注意:
a,自己支持wrap_content.
b,padding要自己处理

第二种:继承特定的View(如ImageView,textview)


这种方法比较常见,一般用于拓展某种已有view的功能,比如textview,实现起来比较容易,这种方法不需要我们去支持wrap_content和padding.

第三种: 继承ViewGroup派生出全新的Layout布局.如LinearLayout,RelativeLayout只是系统给我们定义好的比较常用的布局


这种方式主要用于实现自定义的新布局,将定义好的布局当成系统中的LinearLayout等布局一样使用.当某种效果看起来像几种View组合在一起的时候,可以使用这种方法.采用这种方法稍微复杂,需要合适地处理VIewGroup的测量,布局这两个过程.并同时处理子view的测量和布局,

第四种: 继承特定的ViewGroup(如FrameLayout)


这种方法比较常见,当某种效果像是几个view组合起来的时候可以使用这种布局来实现.采用这种方法我们不需要处理ViewGroup的测量和布局这两个过程.这种方法和方法3类似.一般来说.3可以实现的布局.这种方法都可以实现.

自定义View的注意事项:

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带有滑动嵌套时要处理滑动冲突
这就要熟悉事件的分发机制了.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值