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 plaincopy
  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 plaincopy
  1. OnPreDrawListener opdl=new OnPreDrawListener(){
  2. @Override
  3. public boolean onPreDraw() {
  4. animDraw.start();
  5. return true;
  6. }
  7. };
  8. //onCreate方法中
  9. imageV.getViewTreeObserver().addOnPreDrawListener(opdl);

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

ViewTreeObserver相关推荐

  1. Android ViewTreeObserver简介-------------转

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

  2. Android 3.0 r1中文API文档(104) —— ViewTreeObserver

    正文 一.结构 public final class ViewTreeObserver extends Object java.lang.Object android.view.ViewTreeObs ...

  3. ViewTreeObserver简介

    一.结构 public final class ViewTreeObserver extends Objectjava.lang.Objectandroid.view.ViewTreeObserver ...

  4. ViewTreeObserver视图树观察者

    ViewTreeObserver,视图树的观察者,该类是用来监听视图树的,当视图树发生某些改变时,会通知该类中的某些接口.该类中包含多个监听不同事件变化的接口,通过覆写接口中的方法,以在视图树发生改变 ...

  5. 关于ViewTreeObserver的理解

    作用:通过名字就可以知道它是View树的观察者,当View树的发生变化的时候会发出通知.ViewTreeObserver是不能被应用程序实例化的,因为它是由视图提供的,通过view.getViewTr ...

  6. android获得一个view的高度,Android ViewTreeObserver使用总结及获得View高度的几种方法...

    ViewTreeObserver 注册一个观察者来监听视图树,当视图树的布局.视图树的焦点.视图树将要绘制.视图树滚动等发生改变时,ViewTreeObserver都会收到通知,ViewTreeObs ...

  7. android 动态设置View的高度和宽度,ViewTreeObserver使用

    private int mMonitorHeight = 0; private int mMonitorWidth = 0; private boolean bisSetScreen = false; ...

  8. android解析布局树,Android Viewtreeobserver解析

    ViewTreeObserver是view事件的观察者.这个观察者用来监听视图树,会监听视图树发生全局变化时发出的通知.这里指的全局 事件包括而且不局限在以下几个:整个视图树的布局变化,开始绘制视图, ...

  9. ViewTreeObserver的使用

    序言 A view tree observer is used to register listeners that can be notified of global changes in the ...

最新文章

  1. poj 1200 Crazy Search
  2. python获取文件编码格式除了chardet还有别的方式吗_使用python的chardet库获得文件编码并修改编码...
  3. 撒花!斯坦福深度学习最新视频发布,吴恩达主讲!
  4. [论文浅析]ICLR2017 跨语言,跨任务,跨领域序列标注
  5. shell shift与{}_一文掌握shell脚本中shift的用法及功能
  6. 默写测试晋级流程 1126
  7. 银行科技管理工作优化提升之我见
  8. wampserver3.2.0_MySQL 8.0 技术详解
  9. 基于Socket的文件传输(使用CSocket类)
  10. 【记忆化递归+DP】LeetCode 139. Word Break
  11. LeetCode刷题——344. 反转字符串
  12. php 怎么写配置文件,在PHP中如何把数组写成配置文件
  13. python底层源码_python源码剖析——系列一
  14. USB 3.0 高清音视频采集芯片——MS2130
  15. umount提示target is busy无法卸载
  16. Wifi热点java_Wifi热点实现文件传输
  17. JZOJ 7066. 【2021.4.24 NOI模拟】ehzeux与圆周(DP)
  18. hive表信息查询、查看表结构、表操作等
  19. QT运行时报错Gtk-Message: 20:31:49.219: Failed to load module “canberra-gtk-module
  20. mall4j开源商城

热门文章

  1. 操作系统原理第二章:操作系统结构
  2. 【Groovy】编译时元编程 ( ASTTransformation#visit 方法获取 Groovy 源文件 )
  3. [Spring cloud 一步步实现广告系统] 21. 系统错误汇总
  4. 绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来
  5. 【福利】微信小程序130个精选Demo合集
  6. Action访问Servlet API的三种方法
  7. robotframework使用RequestsLibrary进行http接口测试
  8. DedeCms如何调用Discuz论坛主题等数据方法总结
  9. es2017 提供的针对字符串填充的函数:padStart、padEnd
  10. 剑指offer——面试题10:斐波那契数列