View和ViewGroup
-
View
- View就是用户交互的组件(控件)
- View是矩形的
- View的职责是绘制和事件处理
- View是android所有控件的父类
-
ViewGroup
- ViewGroup是View的一个子类
- ViewGroup能够包含其他的view(孩子)
- ViewGroup是布局的基类
-
View和ViewGroup的关系
-
继承关系
view_arc.png -
组合关系
viewgroup.png
-
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 测量之后才有值
网友评论