`
leihongtai2010
  • 浏览: 15047 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Android ViewTreeObserver简介

阅读更多
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)
分享到:
评论

相关推荐

    Android ViewTreeObserver

    **Android ViewTreeObserver详解** `Android ViewTreeObserver`是Android UI框架中的一个重要组件,它用于观察View树(View Hierarchy)的变化。这个组件允许开发者在View的生命周期中的特定时刻进行回调,例如当...

    android view变化监听器ViewTreeObserver的简单使用

    android view变化监听器ViewTreeObserver的简单使用 五种监听博客介绍:http://blog.csdn.net/qq_33078541/article/details/50680496

    ViewTreeObserver的使用

    在Android开发中,`ViewTreeObserver` 是一个非常重要的工具,它允许我们监听视图树(View Tree)的各种状态变化,比如布局加载完成、尺寸改变、可见性变化等。了解和熟练使用`ViewTreeObserver`对于优化用户界面的...

    Android API中文文档 v2017.zip

    Android API中文文档基本简介 API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解...

    android获取根View的方法

    在Android开发中,根View(Root View)是布局文件中最高层次的视图容器,它包含并管理着应用界面中的所有子视图。根View通常是LinearLayout、RelativeLayout、FrameLayout等布局组件,它决定了子视图的排列方式和...

    android 输入法弹出布局自动上移

    在Android开发中,用户界面(UI)的交互体验至关重要,特别是在登录界面这样的关键场景中。当用户需要输入信息时,弹出的软键盘可能会遮挡部分屏幕内容,如登录按钮,这会影响用户的操作流程。本篇文章将深入探讨...

    Android-TopScrollHelper,安卓topscrollhelper.zip

    具体实现上,Android-TopScrollHelper可能采用了诸如GestureDetector和ViewTreeObserver等Android内置组件来检测用户的触摸行为和视图的滚动状态。GestureDetector用于识别双击事件,而ViewTreeObserver则帮助监控...

    android EditText跟随键盘弹出,背景不会被顶上去

    4. **监听键盘状态**:通过注册`OnGlobalLayoutListener`监听`ViewTreeObserver`,可以检测到屏幕布局的变化,从而得知键盘是否弹出。当键盘弹出时,动态修改`EditText`所在布局的高度,使其保持可见。 5. **使用 ...

    Android 设置一个底部控件view随着软键盘的弹出而上移

    通过监听`ViewTreeObserver.OnGlobalLayoutListener`,可以检测到视图树的全局布局变化,从而得知软键盘是否弹出。当键盘弹出时,可以手动调整底部视图的位置。 5. **使用第三方库**: 有一些开源库,如`android-...

    Android软键盘与聊天页面底部布局之间优雅地切换

    4. **监听软键盘状态**:可以利用`ViewTreeObserver.OnGlobalLayoutListener`来监听视图树的全局布局变化,从而得知软键盘的打开和关闭。当软键盘弹出时,可以动态调整底部布局的高度,确保关键元素始终可见。 5. *...

    各章android面试题

    8. **性能优化**:包括内存优化(避免内存泄漏、理解内存分配和回收)、绘制优化(理解 Choreographer、ViewTreeObserver 和 ANR)、代码优化(避免冗余计算,合理使用静态变量)。 9. **组件间通信**:Intent的...

    Android视频播放源码,支持小屏,分屏

    此外,可能还使用了`ViewTreeObserver`来监听视图大小的变化,从而动态调整播放界面的布局。 分屏模式在Android 7.0(Nougat)及以上版本中得到了官方支持,主要通过`Activity`的`splitScreen()`方法实现。源码中...

    Android代码-Android截图圆形Canvas.rar

    首先,Android中的截图通常通过`View`类的`draw()`方法或者`ViewTreeObserver.OnGlobalLayoutListener`接口来获取。`draw()`方法允许我们直接绘制`View`的内容到一个`Canvas`上,而`OnGlobalLayoutListener`则可以在...

    android 输入法键盘弹出与否判断和输入法键盘弹出时将界面滚动到指定位置demo

    在Android开发中,输入法键盘的管理是用户体验中不可或缺的一部分。这个"android 输入法键盘弹出与否判断和输入法键盘弹出时将界面滚动到指定位置demo"着重于解决两个关键问题:一是检测输入法键盘是否弹出,二是当...

    android软键盘状态判断DEMO

    在Android开发中,软键盘的状态判断是一个常见的需求,特别是在处理输入框输入时,需要知道软键盘的显示或隐藏以便优化布局。本DEMO——"android软键盘状态判断DEMO"提供了一个解决方案,它能判断软键盘的显示状态,...

    Android应用源码之android 悬浮窗-IT计算机-毕业设计.zip

    这可以通过监听系统事件,如`DisplayMetrics`的变化,或者使用`ViewTreeObserver`来实现。 此外,悬浮窗还涉及到权限问题。从Android 6.0(API Level 23)开始,应用需要在运行时请求`SYSTEM_ALERT_WINDOW`权限,...

    Android :使用ViewTreeObserver进行监听测绘页面

    “android:windowSoftInputMode=adjustPan|stateHidden ,但是没啥用啊,后来又详细的查看了相对应的其他几个参数,也都挨个试验了,最后失败;只好再次去另寻他法 2.第二个方法就是进行让整个页面进行滑动,NestedScroll

    Android代码-android全屏模式下计算键盘的大小.rar

    在Android开发中,全屏模式是一种常见的应用设计需求,它能提供沉浸式的用户体验。然而,在全屏模式下处理软键盘的出现与隐藏,以及精确计算键盘的高度,是开发者经常面临的问题。本文将深入探讨如何在Android全屏...

    android监听软键盘状态

    activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { int heightDiff = activityRootView....

    android adjustNothing下获取键盘高度

    rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { // 在这里处理键盘高度 } }); ``` 3. 在`...

Global site tag (gtag.js) - Google Analytics