Android开发艺术探索学习笔记4——View的工作原理

Android开发艺术探索学习笔记4——View的工作原理

ViewRoot和DecorView

Android开发艺术探索学习笔记4——View的工作原理_第1张图片

关联流程:

Android开发艺术探索学习笔记4——View的工作原理_第2张图片

View的绘制过程:

Android开发艺术探索学习笔记4——View的工作原理_第3张图片

DecorView的内部结构:

Android开发艺术探索学习笔记4——View的工作原理_第4张图片

MeasureSpec

通过SpecMode和SpecSize来避免过多的对象内存分配。

SpecMode种类:

UNSPECIFIED:父容器不对View有任何限制,要多大给多大

EXACTILY:父容器检测出View所需要的精确大小。由SpecSize决定大小。

AT_MOST:父容器指定一个可用大小的SpecSize,大小不能超过这个size,具体的由View决定。

在实际使用中:

MATCH_PARENT:精确模式

WRAP_CONTENT:最大模式

固定大小(100dp):精确模式

对应关系:

Android开发艺术探索学习笔记4——View的工作原理_第5张图片

子View最终的MeasureSpec由:父容器的MeasureSpec和自身的LayoutParams来共同决定的。

View的工作流程:

它的工作流程主要指:measure、layout、draw。

Measure过程

View的Measure工作流程:

除了完成自己的测量流程之外好会遍历子元素的measure方法。

Android开发艺术探索学习笔记4——View的工作原理_第6张图片

Android开发艺术探索学习笔记4——View的工作原理_第7张图片

ViewGroup的Measure工作流程:

ViewGroup没有定义其测量的过程,这是因为ViewGroup是一个抽象类,不同的ViewGroup子类有着不同的布局特性,这导致他们的测量细节各不相同。

但是它提供了一个叫measureChildren的方法,通过这个方法去测量子元素的宽高。这个方法通过获取子元素的LayoutParams并通过getChildMeasureSpec来创建子元素的MeasureSpec并传递给View的measure方法进行测量。

View的布局过程和Activity的生命周期是不相关的。最好是在ViewTreeObserver中去查看View的参量宽高比较好。

Layout过程

这个过程是ViewGroup特有的,用来确定子元素的位置。

Android开发艺术探索学习笔记4——View的工作原理_第8张图片

onLayout方法是一层层传递的。

Android开发艺术探索学习笔记4——View的工作原理_第9张图片

draw过程

view的绘制分为4步:

1、      绘制背景bacgroud.draw(canvas)

2、      绘制自己(ondraw)

3、      绘制children(dispatchDraw)

4、      绘制装饰(onDrawScrollBars)

view的绘制过程的传递是通过dispatchDraw来实现的,它会遍历所有子元素的draw方法。R

如果一个view不希望被绘制的时候可以通过设置setWillNotDraw(true)来完成。

自定义view

自定义View是一个综合的技术体系,涉及到:1、View的层次结构2、时间分发机制3、View工作原理

可将自定义View分为四类:

1、继承View(重写onDraw方法)

2、继承ViewGroup派生特殊的Layout

3、继承特定的View(扩展已有View的功能)

       不需要再自己再进行宽高的设置

4、继承特定的ViewGroup

Android开发艺术探索学习笔记4——View的工作原理_第10张图片

       不需要自己再进行测绘和布局

自定义View须知

1、      直接继承View或者ViewGroup必须在onMeasure中必须特殊处理wrap_comtent

2、      padding不像margin,不会自己生效,需要自己处理

3、      View本身有post方法,不需要handler进行处理

4、      View变得不可见时需要及时停到动画和线程,不然会内存泄漏,可见不可见会有onDetachFromActivity和onAttachToActivity回调。

自定义View没有捷径可走,要多看demo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(读书笔记)