.android view绘制过程
来源:互联网 发布:java并发编程的例子 编辑:程序博客网 时间:2024/05/16 00:50
简单描述可以解释为:计算大小(measure),布局坐标计算(layout),绘制到屏幕(draw);
下面看看每一步的动作到底是什么,
第一步:当activity启动的时候,触发初始化view过程的是由Window对象的DecorView调用View(具体怎样从xml中读取是用LayoutInflater.from(context).inflate)对象的 public final void measure(int widthMeasureSpec, int heightMeasureSpec)方法开始的,这个方法是final类型的,也就是所有的子类都不能继承该方法,保证android初始化view的原理不变。具体参数类值,后面会介绍。
第二步:View的measure方法 onMeasure(widthMeasureSpec, heightMeasureSpec),该方法进行实质性的view大小计算。注意:view的大小是有父view和自己的大小决定的,而不是单一决定的。这也就是为什么ViewGroup的子类会重新该方法,比如LinearLayout等。因为他们要计算自己和子view的大小。View基类有自己的实现,只是设置大小。其实根据源码来看,measure的过程本质上就是把Match_parent和wrap_content转换为实际大小
第三步:当measure结束时,回到DecorView,计算大小计算好了,那么就开始布局了,开始调用view的 public final void layout(int l, int t, int r, int b),该还是也是final类型的,目的和measure方法一样。layout方法内部会调用onlayout(int l, int t, int r, int b )方法,二ViewGroup将此方法abstract的了,所以我们继承ViewGroup的时候,需要重新该方法。该方法的本质是通过measure计算好的大小,计算出view在屏幕上的坐标点
第四步:measure过了,layout过了,那么就要开始绘制到屏幕上了,所以开始调用view的 public void draw(Canvas canvas)方法,此时方法不是final了,原因是程序员可以自己画,内部会调用ondraw,我们经常需要重写的方法。 简单描述可以解释为:计算大小(measure),布局坐标计算(layout),绘制到屏幕(draw);
- Android 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绘制过程
- Android View 绘制过程
- Android View绘制过程
- Android View绘制过程
- Android View 绘制过程
- Android View绘制过程
- jvm terminated exit code=xxx
- 手机号的正则表达式
- dev cpp 以及 codeblocks 常用编辑技巧
- gpio_direction_output 与 gpio_set_value
- cx_oracle设置问题汇总
- .android view绘制过程
- 如何调试 SDWebImage,使用前的准备工作
- python:解析js中常见的 不带引号的key的 json
- 控件设计
- DIV 里 table 居中的问题
- UVa 699 - The Falling Leaves【递归】
- many to one
- leetcode总结-- heapq运用,关于super ugly number, merge k sorted list
- 解决CSS透明度被继承问题