ViewTreeObserver是个view事件的观察者。要注意的是它的初始化就是调用View.getViewTreeObserver()。
包含下面6个事件:
interface ViewTreeObserver.OnDrawListener
- 挡在一个视图树绘制时,所要调用的回调函数的接口类(level 16)
interface ViewTreeObserver.OnGlobalFocusChangeListener
- 当在一个视图树中的焦点状态发生改变时,所要调用的回调函数的接口类
interface ViewTreeObserver.OnGlobalLayoutListener
- 当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时,所要调用的回调函数的接口类
interface ViewTreeObserver.OnPreDrawListener
- 当一个视图树将要绘制时,所要调用的回调函数的接口类
interface ViewTreeObserver.OnScrollChangedListener
- 当一个视图树中的一些组件发生滚动时,所要调用的回调函数的接口类
interface ViewTreeObserver.OnTouchModeChangeListener
- 当一个视图树的触摸模式发生改变时,所要调用的回调函数的接口类
具体的实例如下:
在onCreate方法中获取控件的宽高(由于View组件布局要在onResume回调后完成,所以直接调用获取宽高函数肯定获取不到)
ViewTreeObserver observer = view.getViewTreeObserver();
observer .addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
final int w = view.getMeasuredWidth();
final int h = view.getMeasuredHeight();
view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
});
网友评论