Android中view的加载机制(三)
来源:互联网 发布:淘宝待清洗订单 编辑:程序博客网 时间:2024/05/21 17:48
在view加载完之后android就开始进行view的绘制了,在view的绘制过程都必须经历三个最主要的过程,也就是measure、layout和draw,接下来进行逐个分析。
1、measure过程
measure过程主要是对view的宽高进行测量,获取view的大小,在view中对应的方法是onMeasure方法,如下:
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); }MeasureSpec里面封装了两个信息,一个是宽高,另一个是模式。
int width = MeasureSpec.getSize(widthMeasureSpec);// 布局的宽度
int height = MeasureSpec.getSize(heightMeasureSpec);// 布局的高度
int widthMode = MeasureSpec.getMode(widthMeasureSpec);// 宽度的模式
int heightMode = MeasureSpec.getMode(heightMeasureSpec);// 高度的模式
模式分为三种:
MeasureSpec.AT_MOST; 至多 wrap_content
MeasureSpec.EXACTLY; 确定模式 布局文件中写死dp或者match_parent
MeasureSpec.UNSPECIFIED;未确定的模式
重新设置宽高模式:
heightMeasureSpec = MeasureSpec.makeMeasureSpec(height,MeasureSpec.EXACTLY);
widthMeasureSpec = MeasureSpec.makeMeasureSpec(width,MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
设置控件的活动范围,指定在屏幕的大小:
setMeasuredDimension(width,height);
手动测量控件的大小:
measure(int, int);
2、layout过程
layout主要是设置绘制的位置,对应view中的方法是onLayout,这个方法中可以获取到被绘制的view的宽高,在view给其孩子设置尺寸和位置时被调用。子view,包括孩子在内,必须重写onLayout(boolean, int, int, int, int)方法,并且调用各自的layout(int, int, int, int)方法。
@Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); }这个方法的参数是相对于父view的位置。
3、draw过程
draw是绘制的方法,在view中对应的是 onDraw方法,在这个方法里面执行view的绘制,可以绘制常见的形状,文字,路径、贝塞尔曲线等等。
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); }
Canvas是一个绘制的类,是一个绘制形状的类包含了很多形状,这样就可以直接绘制了,一般的绘制步骤为:创建画笔,为画笔设置属性,绘制三步。
这三个方法是view绘制中比较核心的方法,除了这两个之外还有两个方法也比较常用分别是onFinishInflate,onSizeChanged如下:
onFinishInflate是在xml的布局加载完成之后回调,通常再次方法里面进行findviewbyid进行初始化。
onSizeChanged是当控件的尺寸发生变化的时候调用,通常在此方法里面进行手动测量view的宽高
以上就是view的加载机制中涉及到的常用知识,在自定义控件中就是灵活的使用这些方面的知识进行灵活的运用。除了这些在自定义控件中还需要用到事件的处理机制,手势识别,ViewDragHelper等知识点综合运行,才能实现一个完美的效果。
- Android中view的加载机制(三)
- Android中view的加载机制(一)
- Android中view的加载机制(二)
- Android的view加载机制
- Android 中View的绘制机制源码分析 三
- Android UI之View的加载机制(二)
- 【Android学习】View点击时间的分发机制(三)
- Android自定义View的事件分发机制(三)
- Android View绘制机制基础(三)
- Android 触摸事件机制(三) View中触摸事件详解
- Android中View的加载和显示
- Android中View的加载过程
- android中view的事件分发机制
- Android中View的事件分发机制
- Android中View的事件分发机制
- Android中View的事件分发机制
- Android中View的事件分发机制
- Android中View的事件分发机制
- MySQL 连接查询
- 从曹操杀华陀而联想到的系统性能问题才是真正的致命的问题
- java的插入排序算法学习
- oracle中sql语句中多个查询结果的交集、差集和并集
- HTM-16.2代码(11)——xTZSearch
- Android中view的加载机制(三)
- linux内核编译问题——undefined reference to `error'
- 深入浅出RxJava三--响应式的好处
- Java设计模式(14)行为型:模板方法模式
- Mybatis传多个参数(三种解决方案)
- Android 布局文件单行显示,多余文字用“...”代替
- php的pow函数
- CentOS 6.7 安装Scala 2.10.4 和 Spark 1.6.0
- html5下input的placeholder标签兼容ie9