博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android View 的绘制流程
阅读量:6856 次
发布时间:2019-06-26

本文共 890 字,大约阅读时间需要 2 分钟。

一.布局的加载

activity如何加载布局 setContentView(xml);

setContentView();

1️⃣调用activity的setContentView();

2️⃣调用 Window 里面的setContentView();

3️⃣phoneWindow是Window(抽象类)的唯一实现类

4️⃣最终调用PhoneWindow类里面的setContentView();

5️⃣调用installDecor();初始化DecorView 向DecorView中添加系统布局 获取其中的帧布局

6️⃣创建出DecorView

7️⃣ generatelayout传入创建出来的DecorView

布局资源

最后返回的是content帧布局 所有的xml布局都是放在这个FramLayout里面

二.绘制流程

在PhoneWindow的setContentView方法中调用了ViewGroup的addView()

看invalidate(true);

ViewGroup里面的do...while循环一直找到DecorView

调用ViewRootImpl中的invalidateChildInParent();

调用 invalidate();

调用scheduleTraversals

调用doTraversals();

调用performTraversals(); View绘制的核心方法

performTraversals()做了三件事情

  1. performMeasure(childWidthMeasureSpec, childHeightMeasureSpec);测量

调用view的 measure()

2.performLayout(lp, desiredWindowWidth, desiredWindowHeight);布局

调用view的 layout();

3.performDraw();绘制

最终调用View的draw();

转载于:https://juejin.im/post/5cb3074ef265da0369028962

你可能感兴趣的文章
hdu1796 How many integers can you find
查看>>
Synchronized之二:synchronized的实现原理
查看>>
项目属性-->生成事件-->后期生成事件命令行
查看>>
[dp] hdu 4472 Count
查看>>
Fork/Join框架
查看>>
from会存在潜在的陷阱
查看>>
二叉搜索树(Binary Search Tree)--C语言描述(转)
查看>>
单线程02
查看>>
删除我的电脑中360随身WiFi云U盘的图标
查看>>
EntityFramework 7 Migrations 迁移命令
查看>>
SCM文章9类:外部中断示例程序
查看>>
thread.join() 方法存在的必要性是什么?
查看>>
关于audio标签播放跨域的问题
查看>>
用WPF窗体打造个性化界面的图片浏览器
查看>>
zookeeper 集群搭建
查看>>
WPF自定义控件(二)の重写原生控件样式模板
查看>>
分布式系统理论基础 - CAP
查看>>
跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击
查看>>
win 停止tomcat
查看>>
Laravel-mix 中文文档
查看>>