当前位置:   article > 正文

Android UI绘制流程解析_ui 绘制原理

ui 绘制原理

目录

写在前面

一、UI绘制流程及原理

二、View的绘制流程

三、UI绘制详细步骤


写在前面

今天这篇文章其实是我的一篇学习笔记哈,整体写的比较简单,为了日后复习用,我就把它放在了博客上,勿喷!谢谢!

一、UI绘制流程及原理

问题:View是如何被添加到屏幕窗口上的

  • 创建顶层布局容器DecorView
  • 在顶层布局中加载基础布局ViewGroup
  • 将ContentView添加到基础布局中的FrameLayout中

源码分析:自定义测试入口类继承自Activity

  1. public class TestActivity extends Activity {
  2. @Override
  3. protected void onCreate(@Nullable Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.activity_add_address_layout);
  6. }
  7. }

Activity:



The only existing implementation of this abstract class is android.view.PhoneWindow, which you should instantiate when needing a Window.   这里意思是它是一个抽象类,并且具有唯一的实现类PhoneWindow。




generateLayout根据系统主题的属性通过requestFeature()和setFlags()进行一系列调用。接着是进行解析窗口View,根据feature的值对layoutResource进行不同的赋值操作,初始化好layoutResource之后,通过


将layoutResource进行解析创建了一个root对象,然后将root对象添加到DecorView里面,然后重新回到上面去:

得到contentParent之后,最后将它进行返回。

总结:

接着会调用:mLayoutInflater.inflate(layoutResID, mContentParent); 将我们在activity中设置的布局资源通过xml解析添加到frameLayout中。

二、View的绘制流程

首先来看这张图,总结了View的绘制流程:

源码分析:

ActivityThread:--->handleMessage()--->LAUNCH_ACTIVITY



此时会回调Activity生命周期的onResume()方法。



接着去WindowManagerImpl中找addView()方法:









三、UI绘制详细步骤

同样的,首先来看下面这张图:

接着来看测量,下面是具体的源码跟踪:







查看FrameLayout的onMesure()方法,因为DecorView是继承自FrameLayout:

布局:

绘制:

最后是测量布局绘制整个的流程总结:

OK,这篇笔记就到这里了!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/738045
推荐阅读
相关标签
  

闽ICP备14008679号