概述
测量: onMeasure(): 测量自己的大小,如果是容器,遍历所有子view来计算出该容器的大小
布局: onLayout(): 使用layout()函数对所有子控件布局
绘制: onDraw(): 根据布局的位置绘图
自定义View的布局工作内容
测量阶段:从上到下递归地调用每个 View 或者 ViewGroup 的 measure() 方法,使他们的onMeasure工作,测量他们的尺寸并计算它们的位置。
布局阶段:从上到下递归地调用每个 View 或者 ViewGroup 的 layout() 方法,使他们的onLayout工作,把测得的它们的尺寸和位置赋值给它们。
View总结成三步
1 重写 onMeasure() 方法,并在里面调用 super.onMeasure(),触发原有的自我测量;
2 在 super.onMeasure() 的下面用 getMeasuredWidth() 和 getMeasuredHeight() 来获取到之前的测量结果,并使用自己的算法,根据测量结果计算出新的结果;
3 调用 setMeasuredDimension() 来保存新的结果。
ViewGroup的测量
ViewGroup 在 onMeasure() 中会调用所有子 View 的 measure() 让它们进行自我测量(onMeasure),并根据子 View 计算出的期望尺寸来计算出它们的实际尺寸和位置(会以子 View 给出的期望尺寸来优先作为实际尺寸)然后保存。同时,它也会根据子 View 的尺寸和位置来计算出自己的尺寸然后保存;
参考:
[自定义控件详解(五):onMeasure()、onLayout()](https://www.cnblogs.com/xqxacm/p/6673469.html)
[自定义View:OnMeasure的重写](https://www.jianshu.com/p/253de2052793)
最后
以上就是年轻硬币为你收集整理的onMeasure()与onLayout()的一些总结的全部内容,希望文章能够帮你解决onMeasure()与onLayout()的一些总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复