View的绘制流程笔记

View和ViewGroup

  • View

    1. View就是用户交互的组件(控件)
    2. View是矩形的
    3. View的职责是绘制和事件处理
    4. View是android所有控件的父类
  • ViewGroup

    1. ViewGroup是View的一个子类
    2. ViewGroup能够包含其他的view(孩子)
    3. ViewGroup是布局的基类
  • View和ViewGroup的关系

    1. 继承关系


      View的绘制流程笔记_第1张图片
      view_arc.png
    2. 组合关系


      View的绘制流程笔记_第2张图片
      viewgroup.png

View的绘制流程

xml的实质

  1. 实现布局不一定使用xml
  2. 谷歌给开发者的开发糖,提高开发界面的效率
  3. xml还是会转换代码形式创建界面

控制View的大小 测量###

  1. measure -> onMeasure
  2. 找出控件的大小
  3. 真正的测量工作在onMeasure方法里面
  4. onMeasure方法里面必须调用setMeasuredDimension();
  5. setMeasuredDimension保存测量的宽高的值mMeasuredWidth,mMeasuredHeight

控制View的位置 布局###

  1. layout
  2. 四个位置l, t, r, b 相对于父容器
  3. layout->setFrame 完成了对四个成员变量的赋值mLeft, mTop, mRight, mBottom
  4. 父容器发起孩子的布局,调用孩子layout方法,传入四个位置

View的绘制 绘制###

  1. draw - > onDraw
  2. 要去实现onDraw方法绘制控件

ViewGroup的绘制流程

ViewGroup继承自View,绘制流程遵循View的绘制流程

ViewGroup的测量

相同点:measure -> onMeasure
不同点:作为一个父容器,需要去测量孩子,拿到孩子申请的宽高,打包成对孩子的期望,去测量孩子(child.measure)

ViewGroup的布局

相同点:layout(l, t, r, b)
不同点:ViewGroup要去覆写onLayout,去布局孩子,调用孩子layout方法,指定孩子上下左右的位置

ViewGroup的绘制

相同点:draw -> onDraw
不同点:ViewGroup一般不会去画自己,ViewGroup默认实现了dispatchDraw去绘制孩子(child.draw)

getWidth和getMeasuredWidth的区别

  1. getWidth = mRight - mLeft, mRight和mLeft只有走完layout->setFrame后才有值
  2. getMeasuredWidth 测量之后才有值

你可能感兴趣的:(View的绘制流程笔记)