Andorid View工作机制(3)—measure过程 下
来源:互联网 发布:如何才能避免淘宝同款 编辑:程序博客网 时间:2024/06/05 19:32
昨晚在上一篇博客总结了一下View的measure过程,今天看一下ViewGroup是怎么进行测量的。查看ViewGroup的源码,搜索measure和onMeasure方法都没有。那是怎么回事呢?通过源码可以发现,ViewGroup是一个abstract class,这个抽象类没有重写其父类View的onMeasure方法。那么它是如何完成测量过程的呢?搜索measure关键字可以搜索到ViewGroup有2个measure有关系的方法。measureChildren方法和measureChild方法。这2个方法的源码如下:
protected void measureChildren(int widthMeasureSpec, int heightMeasureSpec) { final int size = mChildrenCount; final View[] children = mChildren; for (int i = 0; i < size; ++i) { final View child = children[i]; if ((child.mViewFlags & VISIBILITY_MASK) != GONE) { measureChild(child, widthMeasureSpec, heightMeasureSpec); } } }
通过代码,我们可以看出这个方法会遍历子View,如果字View不是出于GONE状态,那么就执行子元素的measureChild方法,进而执行子View的measure过程。
protected void measureChild(View child, int parentWidthMeasureSpec, int parentHeightMeasureSpec) { final LayoutParams lp = child.getLayoutParams(); final int childWidthMeasureSpec = getChildMeasureSpec(parentWidthMeasureSpec, mPaddingLeft + mPaddingRight, lp.width); final int childHeightMeasureSpec = getChildMeasureSpec(parentHeightMeasureSpec, mPaddingTop + mPaddingBottom, lp.height); child.measure(childWidthMeasureSpec, childHeightMeasureSpec); }
查看measureChild的方法可以看出,这个过程的思路就是将方法的LayoutParams(布局参数)取出,,通过getChildMeasureSpec获取元素的MeasureSpec,然后将MeasureSpec作为参数传递给子View,执行measure方法进行测量。至于ViewGroup为什么不重写View的onMeasure方法呢?因为各种ViewGroup的布局效果并不一致。无法在ViewGroup中就给出统一的实现。在具体的ViewGroup中,才会对onMeasure方法进行重写。
0 0
- Andorid View工作机制(3)—measure过程 下
- Android View工作机制(2)—measure过程 上
- View的工作流程---Measure过程
- View的工作原理之measure过程
- View工作原理(三)视图大小计算过程(measure过程)
- View工作原理(三)视图大小计算过程(measure过程)
- android-View工作原理(三)视图大小计算过程(measure过程)
- View工作原理(measure、layout、draw)
- Android View measure过程
- view measure 过程
- View的measure过程
- View 的 Measure 过程
- 自定义View Measure过程
- 自定义View Measure过程
- 自定义View Measure过程
- view的measure过程
- View的measure过程
- View的绘制流程(二)--------view的measure过程
- ASP.NET 搭建贴吧机器人(零)
- 中介者模式
- 栈的链接存储java写法
- Android-数据存储2(SQLite)及Android底层框架简介
- Ubuntu下apt-get安装Java,Tomcat
- Andorid View工作机制(3)—measure过程 下
- 【Get深一度】SCI及JCR——杂志某一年影响因子(IF)及引用频次(CI)计算的方法
- Android 新闻App的开发思路
- 杭电-2028 Lowest Common Multiple Plus (LCM)
- Swift学习第十二枪----移动数据库王者Realm入门教程
- {小结}2016.6.11【初中部 NOIP提高组 】模拟赛C
- jquery animate自定义动画的使用感受
- 用共轭梯度法求函数极小值和最优解,其中用进退法求步长区间,用黄金分割法求最佳步长
- Mybatis动态SQL--采用开发案例讲解