Android控件绘制流程,View 和 ViewGroup 的绘制流程

View和ViewGroup

View View就是用户交互的组件(控件)

View是矩形的

View的职责是绘制和事件处理

View是android所有控件的父类

ViewGroup ViewGroup是View的一个子类

ViewGroup能够包含其他的view(孩子)

ViewGroup是布局的基类

View和ViewGroup的关系

bc5e44f10544d72595e875267a66fa56.png

2. 组合关系

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值