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

android ViewTreeObserver View变化观察者

当在一个Activity或Fragment中有时我们需要获取一个控件或View的宽高来做处理,如果我们直接layout.getHeight()时 得到的值是为0,这是为什么呢?因为我们的View是呈树...
  • Luck_mw
  • Luck_mw
  • 2017年03月23日 09:47
  • 554

ViewTreeObserver的使用

序言A view tree observer is used to register listeners that can be notified of global changes in the v...
  • qq_22706515
  • qq_22706515
  • 2016年04月13日 11:02
  • 967

android中Viewtreeobserver解析

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

Android 下拉刷新(使用异步任务和ViewTreeObserver监听)

隐藏和显示异步任务,主要是通过控制内边距Pandding来实现 package com.siyehuazhilian.pushdownrefresh; import android.app.Acti...
  • siyehua
  • siyehua
  • 2013年12月27日 09:08
  • 812

ViewTreeObserver源码学习

ViewTreeObserver源码学习一、理解ViewTreeObserver概念ViewTreeObserver用来注册监听器,在视图树全局发生变化时收到通知。它不能被应用实例化,因为它是由视图提...
  • Jafilah2010
  • Jafilah2010
  • 2017年06月16日 16:14
  • 192

android ViewTreeObserver详细讲解

一、结构 public final class ViewTreeObserver extends Object java.lang.Object          android.view.Vi...
  • jj120522
  • jj120522
  • 2012年10月22日 09:53
  • 9163

解析 ViewTreeObserver 源码,体会观察者模式、Android消息传递(上)

从 ViewTreeObserver 源码出发,带你剖析 ViewTreeObserver,并间接体会观察者(Observer)模式、Android消息传递机制在其中的使用。...
  • My_TrueLove
  • My_TrueLove
  • 2016年08月25日 02:14
  • 1549

ViewTreeObserver?

OnGlobalLayoutListener 是ViewTreeObserver的内部类,当一个视图树的布局发生改变时,可以被ViewTreeObserver监听到,这是一个注册监听视图树的观察者(o...
  • qq_23263825
  • qq_23263825
  • 2016年12月24日 11:46
  • 91

java.lang.NoSuchMethodError: android.view.ViewTreeObserver.removeOnGlobalLay的解决方案

今天在做自定义ImageView时,重写onDetachedFromWindow() @Override protected void onDetachedFromWindow() { // T...
  • liopo
  • liopo
  • 2015年08月26日 09:45
  • 847

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

首先我们需要明白ViewTreeObserver的几个方法意义; interface  ViewTreeObserver.OnDrawListener  挡在一个视图树绘制时,所要...
  • luojiusan520
  • luojiusan520
  • 2016年03月08日 23:25
  • 444
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ViewTreeObserver
举报原因:
原因补充:

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