getViewTreeObserver

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);  
           }    
       });   
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容