Android自定义View系列
- Android自定义View注意事项
- Android自定义View之Paint绘制文字和线
- Android自定义View之图像的色彩处理
- Android自定义View之轻松实现圆角和圆形图片
- Android自定义View之双缓冲机制和SurfaceView
- Android自定义View之invalidate和postInvalidate方法的区别
- Android自定义View之事件分发机制总结
- Android自定义View之requestLayout方法和invalidate方法
View的三大流程指的是measure(测量)、layout(布局)、draw(绘制)。
下面我们来分别看看这三大流程
View的measure(测量)
MeasureSpec
MeasureSpec是View的一个内部静态类
//view.class
public static class MeasureSpec {
private static final int MODE_SHIFT = 30;
private static final int MODE_MASK = 0x3 << MODE_SHIFT;
...
/**
* 这种模式不用关心
*/
public static final int UNSPECIFIED = 0 << MODE_SHIFT;
/**
* 精确模式,对应的是match_parent和具体值,比如100dp
public static final int EXACTLY = 1 << MODE_SHIFT;
/**
* 最大模式,对应的就是wrap_content
*/
public static final int AT_MOST = 2 << MODE_SHIFT;
public static int makeMeasureSpec(@IntRange(from = 0, to = (1 << MeasureSpec.MODE_SHIFT) - 1) int size,
@MeasureSpecMode int mode) {
if (sUseBrokenMakeMeasureSpec) {
return size + mode;
} else {
return (size & ~MODE_MASK) | (mode & MODE_MASK);
}
}
/**
* 获取测量的模式
*/
@MeasureSpecMode
public static int getMode(int measureSpec) {
//noinspection ResourceType
return (measureSpec & MODE_MASK);
}
/**
* 获取测量到的尺寸大小
*/
public static int getSize(int measureSpec) {
return (measureSpec & ~MODE_MASK);
}
...
}
MeasureSpec总结起来就是:
- 它由2部分数据组成,分别为定义了View测量的模式和View的测量尺寸大小
- 其中EXACTLY精确模式表示的是match_parent和具体值;AT_MOST最大模式表示的是wrap_content的情况
View的measure过程
View的measure过程由其measure方法完

本文详细介绍了Android自定义View的三大流程——measure、layout和draw,以及Window和ViewRootImpl的角色。讨论了MeasureSpec在测量过程中的作用,ViewGroup如何测量子元素,以及在Activity中正确获取View宽高的方法。同时阐述了Window的添加过程,强调了Window在View显示和事件处理中的关键作用,以及自定义View时需要注意的wrap_content处理。
最低0.47元/天 解锁文章
375

被折叠的 条评论
为什么被折叠?



