ref
https://blog.csdn.net/hardworkingant/article/details/77408329
note
1、ViewTree
首先我们来介绍一下 ViewTree 也就是视图树是什么。
View 和 ViewGroup 是 Android UI 的基本组件, 而 ViewGroup 作为容器,可以包含一组 View, 并且 ViewGroup 其本身就是 View 的扩展。
而各种不同的 Widgets 像 TextView,Button 等等也是View的扩展,只不过是放在各种 Layout 里,比如 LinearLayout,RelativeLayout。而 Layout 却是 ViewGroup 的子类。
而 ViewTree 就是各种 View 和 ViewGroup 放在一个 Layout 里组成的树形结构。我们用 XML 编写的布局就是依照 ViewTree 结构层层叠加的。
2、ViewTreeObserver
ViewTreeObserver 是一个注册监听视图树的观察者(observer),会监听视图树发生全局变化时发出的通知。这个全局事件包括整个树的布局,从绘画过程开始,触摸模式的改变等等。
ViewTreeObserver不能够被应用程序实例化,因为它是由视图提供,通过 view.getViewTreeObserver() 方法获取。
简单的说,这是个 view 事件的观察者。要注意的是它的初始化就是调用View.getViewTreeObserver(),所以要使用 ViewTreeObserver 的方法也是使用这样来获得 ViewTreeObserver 对象再调用方法。