ViewTreeObserver

转载 2015年11月17日 22:24:14

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()中获取控件高度与宽度

  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

  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源码应该可以找到挺多的,待补充吧。

相关文章推荐

ViewTreeObserver的使用

  • 2015年08月11日 11:36
  • 2.2MB
  • 下载

Android ViewTreeObserver

Android ViewTreeObserver

Android ViewTreeObserver

  • 2014年08月21日 16:37
  • 2.47MB
  • 下载

入职实习第四天:ViewTreeObserver简介

转 http://blog.sina.com.cn/s/blog_4b93170a0102e2n3.html Android ViewTreeObserver简介   一、结构 pub...

ViewTreeObserver理解

ViewTreeObserver类是一个监听View中各种状态(焦点的改变、布局的改变、触摸模式的改变、绘制视图前、滚动状态等)。 获得ViewTreeObserver类实例的方式: ViewTr...

Android ViewTreeObserver简介

Android ViewTreeObserver简介   一、结构 public final class ViewTreeObserver extends Object java...

ViewTreeObserver.OnPreDrawListener()第一次无法监听或View第一次加载无图像;

首先我们需要明白ViewTreeObserver的几个方法意义; interface  ViewTreeObserver.OnDrawListener  挡在一个视图树绘制时,所要...

view变化监听器ViewTreeObserver介绍

A view tree observer is used to register listeners that canbe notified of global changes in the view...

AsyncTask、View.post(Runnable)、ViewTreeObserver三种方式总结frame animation自动启动

在一些需求中,需要在程序运行时动画自动启动,我们也知道在android提供的Tween Animation和frame animation。但是当使用frame animation时候,启动Frame...
  • Natepan
  • Natepan
  • 2011年08月23日 09:40
  • 2367
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ViewTreeObserver
举报原因:
原因补充:

(最多只允许输入30个字)