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_arc.png
    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 测量之后才有值
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容