Android View 绘制流程知识点总结

目录
优质文章
Android View绘制三大流程探索及常见问题_梦工厂-CSDN博客
Android View知识点面试题_lizhong-CSDN博客
常见问题
提示
下面是一些常见的问题,可以先尝试的先自我回答一下,点击题目即可查看答案。
什么是View?
简单来说,View是Android系统在屏幕上的视觉呈现,也就是说你在手机屏幕上看到的东西都是View。
View的绘制流程分几步,从哪开始?哪个过程结束以后能看到view?
从ViewRoot的performTraversals开始,经过measure,layout,draw 三个流程。draw流程结束以后就可以在屏幕上看到view了。
View的测量宽高和实际宽高有区别吗?
基本上百分之99的情况下都是可以认为没有区别的。
有两种情况,有区别。
第一种 就是有的时候会因为某些原因 view会多次测量,那第一次测量的宽高 肯定和最后实际的宽高 是不一定相等的,但是在这种情况下最后一次测量的宽高和实际宽高是一致的。
此外,实际宽高是在layout流程里确定的,我们可以在layout流程里 将实际宽高写死 写成硬编码,这样测量的宽高和实际宽高就肯定不一样了,虽然这么做没有意义 而且也不好。
View的measureSpec 由谁决定?顶级view呢?
由view自己的layoutparams和父容器 一起决定自己的measureSpec。
一旦确定了spec,onMeasure中就可以确定view的宽高了。
顶级view就稍微特殊一点,对于decorView的测量在ViewRootImpl的源码里。
|
|
ViewGroup有onMeasure方法吗?为什么?
没有,这个方法是交给子类自己实现的。不同的viewgroup子类 肯定布局都不一样,那onMeasure索性就全部交给他们自己实现好了。
layout和onLayout方法有什么区别?
layout是确定本身view的位置 而onLayout是确定所有子元素的位置。layout里面 就是通过serFrame方法设设定本身view的 四个顶点的位置。这4个位置以确定 自己view的位置就固定了,然后就调用onLayout来确定子元素的位置。view和viewgroup的onlayout方法都没有写。都留给我们自己给子元素布局
draw方法 大概有几个步骤?
一共是4个步骤, 绘制背景———绘制自己——–绘制chrildren—-绘制装饰。
View和ViewGroup什么区别?
Android的UI界面都是由View和ViewGroup及其派生类组合而成的。其中,View是所有UI组件的基类,而ViewGroup是容纳这些组件的容器,其本身也是从View派生出来的。AndroidUI界面的一般结构: