Android ViewTreeObserver简介

一、结构

public final class ViewTreeObserver extends Object
java.lang.Object
android.view.ViewTreeObserver

二、概述

这是一个注册监听视图树的观察者(observer),在视图树种全局事件改变时得到通知。这个全局事件不仅还包括整个树的布局,从绘画过程开始,触摸模式的改变等。ViewTreeObserver不能够被应用程序实例化,因为它是由视图提供,参照getViewTreeObserver()以查看更多信息。

三、内部类

  interface  ViewTreeObserver.OnGlobalFocusChangeListener
  //当在一个视图树中的焦点状态发生改变时,所要调用的回调函数的接口类   interface ViewTreeObserver.OnGlobalLayoutListener
  //当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时,所要调用的回调函数的接口类   interface ViewTreeObserver.OnPreDrawListener
  //当一个视图树将要绘制时,所要调用的回调函数的接口类   interface ViewTreeObserver.OnScrollChangedListener
  //当一个视图树中的一些组件发生滚动时,所要调用的回调函数的接口类   interface ViewTreeObserver.OnTouchModeChangeListener
  //当一个视图树的触摸模式发生改变时,所要调用的回调函数的接口类

四、公共方法

/**注册一个回调函数,当在一个视图树中的焦点状态发生改变时调用这个回调函数。
  * 参数 listener 将要被添加的回调函数
  *异常 IllegalStateException 如果isAlive() 返回false
  */
 public void addOnGlobalFocusChangeListener (ViewTreeObserver.OnGlobalFocusChangeListener listener)  /**注册一个回调函数,当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时调用这个回调函数。
  *参数 listener 将要被添加的回调函数
  *异常 IllegalStateException 如果isAlive() 返回false
  */
 public void addOnGlobalLayoutListener (ViewTreeObserver.OnGlobalLayoutListener listener)
     
 /**注册一个回调函数,当一个视图树将要绘制时调用这个回调函数。
  *参数 listener 将要被添加的回调函数
  *异常 IllegalStateException 如果isAlive() 返回false
  */
 public void addOnPreDrawListener (ViewTreeObserver.OnPreDrawListener listener)  
 /**注册一个回调函数,当一个视图发生滚动时调用这个回调函数。
  *参数 listener 将要被添加的回调函数
  *异常 IllegalStateException 如果isAlive() 返回false
  */
 public void addOnScrollChangedListener (ViewTreeObserver.OnScrollChangedListener listener)  
 /**注册一个回调函数,当一个触摸模式发生改变时调用这个回调函数。
  *参数 listener 将要被添加的回调函数
  *异常 IllegalStateException 如果isAlive() 返回false
  */
 public void addOnTouchModeChangeListener (ViewTreeObserver.OnTouchModeChangeListener listener)   
 //当整个布局发生改变时通知相应的注册监听器。如果你强制对视图布局或者在一个没有附加到一个窗口的视图的层次结构或者在GONE状态下,它可以被手动的调用
 public final void dispatchOnGlobalLayout ()  /**当一个视图树将要绘制时通知相应的注册监听器。如果这个监听器返回true,则这个绘制将被取消并重新计划。如果你强制对视图布局或者在一个没有附加到一个窗口的视图的层次结构或者在一个GONE状态下,它可以被手动的调用
  *返回值 当前绘制能够取消并重新计划则返回true,否则返回false。
  */
 public final boolean dispatchOnPreDraw ()  /**指示当前的ViewTreeObserver是否可用(alive)。当observer不可用时,任何方法的调用(除了这个方法)都将抛出一个异常。如果一个应用程序保持和ViewTreeObserver一个历时较长的引用,它应该总是需要在调用别的方法之前去检测这个方法的返回值。
  *返回值 但这个对象可用则返回true,否则返回false
  */
 public boolean isAlive ()  /**移除之前已经注册的全局布局回调函数。
  *参数 victim 将要被移除的回调函数
  *异常 IllegalStateException 如果isAlive() 返回false
  */
 public void removeGlobalOnLayoutListener (ViewTreeObserver.OnGlobalLayoutListener victim)
  
 /**移除之前已经注册的焦点改变回调函数。
  *参数 victim 将要被移除的回调函数
  *异常 IllegalStateException 如果isAlive() 返回false
  */
 public void removeOnGlobalFocusChangeListener (ViewTreeObserver.OnGlobalFocusChangeListener victim)
  
 /**移除之前已经注册的预绘制回调函数。
  *参数 victim 将要被移除的回调函数
  *异常 IllegalStateException 如果isAlive() 返回false
  */
 public void removeOnPreDrawListener (ViewTreeObserver.OnPreDrawListener victim)
  
 /**移除之前已经注册的滚动改变回调函数。
  *参数 victim 将要被移除的回调函数
  *异常 IllegalStateException 如果isAlive() 返回false
  */
 public void removeOnScrollChangedListener (ViewTreeObserver.OnScrollChangedListener victim)
 
 /**移除之前已经注册的触摸模式改变回调函数
  *参数 victim 将要被移除的回调函数
  *异常  IllegalStateException 如果isAlive() 返回false
  */
 public void removeOnTouchModeChangeListener (ViewTreeObserver.OnTouchModeChangeListener victim)

ViewTreeObserver简介的更多相关文章

  1. Android ViewTreeObserver简介

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

  2. Android为TV端助力 ViewTreeObserver(转载)

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

  3. WebView 简介

    WebView 简介 日期: 2013年10月29日 注意: API可能有演进,所以需要看当前时间决定是否有用 继承结构: public class WebView extends AbsoluteL ...

  4. 监听视图树 ViewTreeObserver 获取View的宽高

    前奏:在哪里可以获取到View的宽高 我们知道,在onCreate方法执行完毕以后,View才开始被测量,所以我们在onCreate方法里面通过view.getWidth()或view.getMeas ...

  5. ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...

  6. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  7. Cassandra简介

    在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...

  8. REST简介

    一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...

  9. Microservice架构模式简介

    在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...

随机推荐

  1. Lucene学习之CURD

    创建索引 Lucene在进行创建索引时,根据前面一篇博客,已经讲完了大体的流程,这里再简单说下: Directory directory = FSDirectory.open("/tmp/t ...

  2. ubuntu14.04中mysql的安裝及utf8编码集配置

    mysql的安裝使用sudo apt-get install mysql-server即可安裝,我安裝的是5.6版.安装过程中会要求输入root账户的密码,按提示输入即可. Mysql Workben ...

  3. 利用R语言打造量化分析平台

    利用R语言打造量化分析平台 具体利用quantmod包实现对股票的量化分析 1.#1.API读取在线行情2.#加载quantmod包3.if(!require(quantmod)){4. instal ...

  4. leetcode算法刷题(二)——动态规划(一)

    上次刷了五六道题,都是关于string处理的,这次想换个知识点刷一下,然后再回头刷string的题,当做复习.. 这几天主要会选择动态规划的题目,因为以前从没刷过这方面的东西,很多东西都不是很懂..就 ...

  5. windows批处理(.bat)

    转自http://www.cnblogs.com/shiney/archive/2011/07/04/2097236.html 本文在运行中有一些小小的问题,我修改了一下,将会在稳重标出 批处理文件是 ...

  6. MYSQ 查看 2 进制日志

    方法 1: myqlbinlog filename; ------------------------------------------------------------------------- ...

  7. Delphi下URL汉字编码解码的两个函数

    //汉字URL编码函数function URLEncode(const S: string; const InQueryString: Boolean): string;var  Idx: Integ ...

  8. egret-android-support-gradle版

    从3.1.3开始,Egret已经实现了Gradle构建!所以下文你爱看不看! 迟钝的Egret从3.1.3版本才开始支持Gradle,而笔者早在1.6.x版本就已经支持了,说明什么?说明Egret在某 ...

  9. JD-GUI on Ubuntu 13.04 64-bit

    Java Decompiler (jd-gui) is a cute little tool I like using when working in Java. Unfortunately it o ...

  10. setObject与setValue的区别

    在使用NSMutableDictionary的时候经常会使用setValue forKey与setObject forKey,他们经常是可以交互使用的,代码中经常每一种的使用都有.1.先看看setVa ...