ViewTreeObserver

api的概述:

A view tree observer is used to register listeners that can be notified of global changes in the view tree. Such global events include, but are not limited to, layout of the whole tree, beginning of the drawing pass, touch mode change.... A ViewTreeObserver should never be instantiated by applications as it is provided by the views hierarchy. Refer to View.getViewTreeObserver() for more information.

简单来说,这是个view事件的观察者。要注意的是它的初始化就是调用View.getViewTreeObserver()


包含下面6个事件:

interface  ViewTreeObserver.OnDrawListener 

挡在一个视图树绘制时,所要调用的回调函数的接口类(level 16)

interface          ViewTreeObserver.OnGlobalFocusChangeListener   
当在一个视图树中的焦点状态发生改变时,所要调用的回调函数的接口类

interface          ViewTreeObserver.OnGlobalLayoutListener
当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时,所要调用的回调函数的接口类

interface          ViewTreeObserver.OnPreDrawListener
当一个视图树将要绘制时,所要调用的回调函数的接口类

interface          ViewTreeObserver.OnScrollChangedListener
当一个视图树中的一些组件发生滚动时,所要调用的回调函数的接口类

interface          ViewTreeObserver.OnTouchModeChangeListener
当一个视图树的触摸模式发生改变时,所要调用的回调函数的接口类


具体的实例,

1,在OnCreate()中获取控件高度与宽度

[java]  view plain copy
  1. ViewTreeObserver observer = view.getViewTreeObserver();    
  2. observer .addOnGlobalLayoutListener(new OnGlobalLayoutListener() {    
  3.            @Override    
  4.            public void onGlobalLayout() {    
  5.               view.getViewTreeObserver().removeGlobalOnLayoutListener(this);    
  6.     final int w = view.getMeasuredWidth();  
  7.             final int h = view.getMeasuredHeight();  
  8.            }    
  9.        });   


2,启动帧动画

使用ViewTreeObserver.OnPreDrawListener listener:当一个视图树将要绘制时产生事件,可以添加一个其事件处理函数:onPreDraw

[html]  view plain copy
  1. OnPreDrawListener opdl=new OnPreDrawListener(){  
  2.         @Override  
  3.         public boolean onPreDraw() {  
  4.             animDraw.start();  
  5.             return true;  
  6.         }  
  7.     };  
  8.    
  9. //onCreate方法中  
  10. imageV.getViewTreeObserver().addOnPreDrawListener(opdl);  


view也有onfocusChangedListener,是不是有些重复呢,这些回调肯定和view中的对应的回调有关联的,只不过这里的是有Global这个关键字,范围更大,其他的用处深入android源码应该可以找到挺多的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值