【视图绘制/自定义控件】

控件绘制

测量 measure 确定View的测量宽高
布局 layout 确定View的最终宽高和四个顶点位置
绘制 draw 将View绘制在屏幕上

measure

view调用后测量自身,ViewGroup除了完成自己的测量,还会调用子元素的测量。各子元素再递归执行
最重要的方法是getDefaultSize,根据MeasureSpec去取SpecMode和SpecSize

MeasureSpec(一个32位int值)
很大程度上决定了一个View的尺寸规格(普通view的measureSpec由父容器的MSLP和自身决定),测量过程中,系统会将View的LayoutParams根据父容器的规则转换成MeasureSpec,再用它测量出View的宽/高。这个这个值的高两位代表SpecMode,低30位代表SpecSize,并提供了打包和解包的方法。
SpecMode有三种:
UNSPECINED:父容器对View不做任何限制,一般用于系统内部
EXACTLY:对应layoutParams中的match_parent和具体数值,意为父容器已检测出View所需的精确大小,这是view的最终大小就是SpecSize的值
AT_MOST:对应LayoutParams中的wrap_content,意为父容器制定了一个可用大小即SpecSize,View的大小只要不大于这个值就由View自己定

layout

对ViewGroup的作用在于确定子元素的位置,当ViewGroup的位置被确定后,它在onLayout中会遍历所有的子元素并调用其layout方法

draw

将View绘制到屏幕上面
(1)绘制背景
(2)绘制自身
(3)绘制children
(4)绘制装饰

自定义控件

  1. 对现有的控件进行拓展(特定显示效果)
  2. 通过组合来实现新的控件(为了特定功能,解决多次重复使用同一类型的布局,如应用标题栏)
  3. 重写View来实现全新的控件

你可能感兴趣的:(【视图绘制/自定义控件】)