自定义View (一) :View的工作原理

1,ViewRoot和DecorView:

ViewRoot对应于ViewRootImpl类,是连接WindowManager和DceorView的纽带,View的三大流程(measure,layout,draw)都通过ViewRoot来完成.ActivityThread中,当Activity对象创建完毕后,会将DecorView添加到Window中,同时创建ViewRootImpl对象,并将ViewRootImpl和DecorView建立联系.View的绘制流程是从ViewRoot的performTraversals方法开始,经过measure(测量View的宽高),layout(确定View在父控件中的位置),draw(将View绘制在屏幕上)三个过程最终将一个View绘制出来.performTraversals依次调用performMeasure,performLayout,performDraw三个方法.

Measure决定View的宽高,之后就可以通过调用getMeasureWidth和getMeasureHight方法获取到测量后的宽高.

Layout过程决定了View的四个顶点的坐标和实际的View宽高,完成后可通过getTop,getBottom,getLeft,getRight获取到View的四个顶点位置,通过getWidth和getHight获取到View的最终宽高.

Draw决定了View的显示,draw完成后View的内容才能呈现在屏幕上.

DecorView作为顶级View,一般情况下会包含一个竖直方向上的LinerLayout,这个LinerLayout包含上下两个部分(具体情况与Android版本及主题有关),上面标题栏,下面内容栏.在Activity中通过setContentView所设置的布局文件内容被添加到内容栏,内容栏的id是content,因此可以理解Activity指定布局的方法不叫setview而叫setContentView.可以通过ViewGroup content = (ViewGroup)findViewById(android.R.id.conte

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值