View和ViewGroup
View View就是用户交互的组件(控件)
View是矩形的
View的职责是绘制和事件处理
View是android所有控件的父类
ViewGroup ViewGroup是View的一个子类
ViewGroup能够包含其他的view(孩子)
ViewGroup是布局的基类
View和ViewGroup的关系
2. 组合关系
View的绘制流程
xml的实质 实现布局不一定使用xml
谷歌给开发者的开发糖,提高开发界面的效率
xml还是会转换代码形式创建界面
控制View的大小 测量 measure -> onMeasure
找出控件的大小
真正的测量工作在onMeasure方法里面
onMeasure方法里面必须调用setMeasuredDimension();
setMeasuredDimension保存测量的宽高的值mMeasuredWidth,mMeasuredHeight
控制View的位置 布局 layout
四个位置l, t, r, b 相对于父容器
layout->setFrame 完成了对四个成员变量的赋值mLeft, mTop, mRight, mBottom
父容器发起孩子的布局,调用孩子layout方法,传入四个位置
View的绘制 绘制 draw - > onDraw
要去实现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的区别 getWidth = mRight - mLeft, mRight和mLeft只有layout->setFrame才有值
getMeasuredWidth 测量之后才有值