# 读 Android 开发艺术探索 &7

关键词:自定义 View

自定义 View 是一个综合的技术体系,涉及 View 的层次结构、事件分发机制、View 的工作原理等技术细节。面对陌生的自定义 View 的时候,运用以下思想去快速的解决问题:首先掌握了基本功比如 View 的弹性滑动、滑动冲突、绘制原理等;熟练掌握了基本功之后,在面对新的自定义 View 的时候,要能对其进行分类并选择合适的实现思路;平时多积累一些自定义 View 相关的经验,并逐渐做到融会贯通。

1. 自定义 View 的分类 #

  • 继承 View 重写 onDraw 方法。用于实现一些不规则的效果,需要自己支持 wrap_content 和 padding;
  • 继承 ViewGroup 派生特殊的 Layout。用于自定义的布局,重新定义一种新布局,需要合适地处理 ViewGroup 的测量、布局这两个过程,并同时处理子元素的测量和布局过程;
  • 继承特定的 View 比如 TextView。用于拓展某种已有的 View 的功能;
  • 继承特定的 ViewGroup 比如 LinearLayout。几种 View 组合在一起的效果;

2. 自定义 View 需要知道的几点 #

  • 让 View 支持 wrap_content。对于直接继承自 View 的控件,如果不对 wrap_content 做特殊处理,那么就相当于使用 match_parent。需要指定一个 wrap_content 模式的默认宽高即可;
  • 如果有必要,让 View 支持 padding。直接继承 View 和 ViewGroup 的控件,padding 是默认无法生效的,需要自己处理;(中心思想就是要考虑到 View 四周的空白)
  • 尽量不要在 View 中使用 Handler,没必要;View 本身就提供了 post 系列的方法,完全替代 Handler 的作用;
  • View 中如果有线程或动画需要停止的时候,那么 View#onDetachedFromWindow 是一个很好的时机;
  • 处理冲突

End.

Note by HF.
Learn from 《Android 开发艺术探索》


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值