android view的讲解 之 View的工作原理(decorView,viewRoot讲解)(一)

来源:互联网 发布:sql的存储过程 编辑:程序博客网 时间:2024/04/30 10:58
View:安卓视觉呈现,当系统给我们View满足不了我们,我们想要更炫酷的效果,自定义View实现;
ViewRoot对应ViewRootmipl,他是连接windowManager和DecorView的纽带;

通过这个源码可知:创建ViewRootmipl对象,并将viewRootImpl和DecorVeiw建立连接。

2.1view的绘制流程 (Traversals)车我搜
view的绘制流程是由viewRoot的prefromTravesals方法开始,经过measure,layout,draw来
完成view的绘制;

prefromTravesals分别调用了preformMeasue(),preformLayout,preformDraw();
prefromMeausre调用meause方法,meause方法掉用onMeausre()方法,完成父容器向子元素
measure的流程,然后子元素重复父容器的meause流程,完成Veiw的测量;
preformLayout,preformDraw都是一样的;只不过preformDraw是通过dispathDraw方法完成的;
意义是相同的;

DecorView是一个顶级的view;

通过源码可以知道:DecorView是一个frameLayout. view的执行会先经过decorView,然后才是我们的view;
DecorView是整个应用的界面,里面有标题和content;

MeauseSpec在很大程度上决定View的尺寸规格,在测量过程中还受父容器的影响。
MeauseSpec需要LayoutParams和父容器一起决定view的MeauseSpec;
测量过程:
系统将view的LayoutParam根据父容器施加的规格转化为MeauseSpec,然后对其测量宽高;

MeauseSpec是一个32位的int值,高2位的SpecMode,低30位的SpecSize;
SpecMode是测量模式。SpecSize是测量尺寸规格;
(12(SpecMode).2323232323232323232323...(30位 SpecSize))
SpecMode有三个类



对于普通View是由父容器的MeasureSpec和LayoutParams来决定的,
View采用固定宽高时,不管父容器的MeasureSpec是什么,view的MeasureSpec都是精确模式;
大小并遵循LayoutParams中的大小。
view是match_Parent时。如果父容器是精确模式,那么view也是精确模式,大小是父容器的剩余空间。如果父容器是最大模式,view也是最大模式,大小不会超过父容器的剩余空间
view是wrap_content时。不管父容器是精确模式还是最大模式,view模式总是最大化,大小不超过父容器剩余空间。


阅读全文
1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 七个月宝宝大便还没成行怎么办 宝宝一岁了还没长牙怎么办 宝宝什么都会就差不会独占怎么办 两岁宝宝肚子不舒服还吐怎么办 两岁宝宝吃坏肚子吐怎么办 1岁半儿童牙烂了怎么办 一岁宝宝吃了就吐怎么办 两岁宝宝龋齿门牙掉了怎么办 一岁宝宝冻着了呕吐怎么办 两岁宝宝喉咙有痰呼呼响怎么办 1岁宝宝吐的水水怎么办 宝宝吐了5 6次了怎么办 7岁儿童吃了就吐怎么办 狗狗拉稀呕吐不吃饭只喝水怎么办 宝宝吃坏肚子上吐下泄怎么办 一岁宝宝又吐又拉怎么办 八个月宝宝吃什么吐什么怎么办 九个月宝宝吃什么吐什么怎么办 三岁宝宝吃什么吐什么怎么办 2岁宝宝又拉又吐怎么办 6岁儿子又吐又拉怎么办 2岁宝宝吃了就吐怎么办 宝宝吃饱了就吐吐了在吃怎么办 3岁宝宝吃了就吐怎么办 6岁儿童又吐又拉怎么办 还没满月的宝宝肚子胀气怎么办 婴儿拉屎有粘液像果冻状怎么办 宝宝不爱吃饭怎么办吃就吐出来 19天的宝宝生理性腹泻怎么办 33天的婴儿生理性腹泻怎么办 两个多月宝宝生理性腹泻怎么办 3岁儿童又吐又拉怎么办 宝宝两岁了突然说话有点口吃怎么办 姜文怎么克服口吃 说话结巴怎么办 慢性咽炎嗓子干哑说话费劲怎么办 感冒后嗓子不疼 说话费劲怎么办 小孩子在幼儿园内向老尿裤子怎么办 五岁宝宝总是抽鼻子有黄鼻涕怎么办 2岁宝宝头有大人的那么大怎么办 一岁四个月宝宝不理人不说话怎么办 两岁七个月还不会说话怎么办