View的绘制流程笔记

作者: 范蓄能 | 来源:发表于2016-08-26 11:23 被阅读400次

    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 测量之后才有值

    相关文章

      网友评论

      本文标题:View的绘制流程笔记

      本文链接:https://www.haomeiwen.com/subject/zlxzsttx.html