自定义view分类和注意事项

本文深入探讨Android自定义View的四种常见方式,包括View、ViewGroup、特定View及特定ViewGroup的扩展。详解自定义View的绘制流程、注意事项,如支持wrap_content、padding处理、线程管理等,助您掌握自定义View核心技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作一段时间,再看<<Android开发艺术探索>>觉得里面总结的知识还是很好的,自定义view这个章节结合源码看过几次了,这回在博客上简单记录一下:)

View系统的绘制流程会从ViewRoot的performTraversals()方法中开始的,绘制从DecorView开始measure,layout,draw…

自定义view分类
1.extends View 重写onDraw
通常是为了实现不规则的图形
2.extends ViewGroup派生特殊的layout
通常是几种view的组合的时候考虑用,要注意重写onMeasure和OnLayout,里面往往包含子view布局的逻辑
3.extends 特定的View(如TextView)
这种比较常用,重写特定view中的某些函数,达到想要的view效果
4.extends特定的ViewGroup(如LinearLayout)
这种比较常用,重写特定ViewGroup中的某些函数,达到想要的效果

自定义view注意事项
1.让view支持wrap_content
这是因为直接继承view或者viewgroup的控件,如果不在onMeasure中对wrap_content做特殊处理的,那么当外借在不居中使用wrap_content时就无法达到预期效果,而是和设置match_parent的效果是一样的

2.如果要让view支持padding
这是因为直接继承view的控件,如果不在draw方法中处理padding,那么padding属性将无法生效.另外,直接继承viewGroup的控件,如果不在onMeasure和onLayout方法中处理padding和子view之间的margin的影响的话,那么设置padding和子view之间的margin将无效

3.尽量不要在view中使用handler
可以使用view.post系列的方法替代handler的作用,除非必须使用handler来传递消息

4.view中如果有线程或动画的话,需要及时停止,避免内存泄露
view中如果有线程或动画的话,可以在onDetachedFromWindow()这个时机停止,这个方法会在activity退出和view被remove的时候调用.还有在view变得不可见的时候也需要停止线程或动画.

5.view带有嵌套滑动时,要处理好滑动冲突

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值