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. 使用cvReleaseImage()释放图像出错

    前几天用opencv写程序的时候,在用cvReleaseImage()函数释放cvLoadImage()加载的图像的时候出错,如下所示: IplImage *src = cvLoadImage(fil ...

  2. OpenGL鼠标旋转图像

    (鼠标旋转功能) #include <iostream> using namespace std; #include<gl/glut.h> GLfloat transx,tra ...

  3. 出现No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here异常

    问题描述: public void save(BaseEntity baseEntity) { Session session = null; try { session = currentSessi ...

  4. Maven管理Android项目1

    maven-android-plugin网站:https://code.google.com/p/maven-android-plugin/wiki/GettingStarted   android ...

  5. ajax动态加入的元素不被jquerymobile渲染问题

    一:对于listview: $(‘ul’).listview(‘refresh’); 二:对于div或其他: $(‘allAddContent’).trigger( “create” );

  6. 论山寨手机与Android联姻 【8】 自己动手做XP手机

    2010年1月20日,ViewSonic在北京发布了一款真正意义的电脑手机VCP08.根据商家的宣传,VCP08之所以能够被称为真正的电脑手机,是因为“该机做到了把真正的WindowsXP操作系统嵌入 ...

  7. 关于LWIP---UDP

    lwip是一个轻量级的TCP/IP协议栈(Lightweight TCP/IP Stack)实现,最初是瑞士计算机科学学院Adam Dunkels编写的一个应用于无操作系统的嵌入式系统中的TCP/IP ...

  8. Docker 基于已有镜像的容器创建镜像

    Docker 基于已有镜像的容器创建镜像: docker:/root# docker run -it januswel/centos /bin/bash docker exec -it januswe ...

  9. nova availability zone

    find a bug: at first there is only one zone. create aggregate host1 in zone1 create aggregate host1 ...

  10. Linux学习笔记2:如何快速的学习使用一个命令

    Linux 分层 内核 库: .so 共享对象,windows:dll 动态链接库 应用程序 Linux的基本原则: 1.由目的单一的小程序组成:组合小程序完成复杂任务: 2.一切皆文件: 3.尽量避 ...