我是靠谱客的博主 年轻硬币,最近开发中收集的这篇文章主要介绍onMeasure()与onLayout()的一些总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

测量: 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()的一些总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(76)

评论列表共有 0 条评论

立即
投稿
返回
顶部