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

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模式总是最大化,大小不超过父容器剩余空间。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值