文档章节

getViewTreeObserver的用法

蜗牛崛起
 蜗牛崛起
发布于 2017/05/03 16:15
字数 351
阅读 13
收藏 0
点赞 0
评论 0

ViewTreeObserver是个view事件的观察者。要注意的是它的初始化就是调用View.getViewTreeObserver()。

包含下面6个事件:

interface ViewTreeObserver.OnDrawListener

挡在一个视图树绘制时,所要调用的回调函数的接口类(level 16)

interface ViewTreeObserver.OnGlobalFocusChangeListener

当在一个视图树中的焦点状态发生改变时,所要调用的回调函数的接口类

interface ViewTreeObserver.OnGlobalLayoutListener

当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时,所要调用的回调函数的接口类

interface ViewTreeObserver.OnPreDrawListener

当一个视图树将要绘制时,所要调用的回调函数的接口类

interface ViewTreeObserver.OnScrollChangedListener

当一个视图树中的一些组件发生滚动时,所要调用的回调函数的接口类

interface ViewTreeObserver.OnTouchModeChangeListener

当一个视图树的触摸模式发生改变时,所要调用的回调函数的接口类

具体的实例如下:

在onCreate方法中获取控件的宽高(由于View组件布局要在onResume回调后完成,所以直接调用获取宽高函数肯定获取不到)

ViewTreeObserver observer = view.getViewTreeObserver();    
observer .addOnGlobalLayoutListener(new OnGlobalLayoutListener() {    
           @Override    
           public void onGlobalLayout() {    
              view.getViewTreeObserver().removeGlobalOnLayoutListener(this);    
          final int w = view.getMeasuredWidth();  
            final int h = view.getMeasuredHeight();  
           }    
       });   

另外我们在**实现跟随式小圆点效果的引导页**时,就是利用该方法来获取两个圆点之间的距离

© 著作权归作者所有

共有 人打赏支持
蜗牛崛起
粉丝 3
博文 120
码字总数 63547
作品 0
东城
程序员
getViewTreeObserver().addOnPreDrawListener()的使用

view.getViewTreeObserver().addOnPreDrawListener(opdl) 此方法在视图绘制前会被调用,测量结束,客户获取到一些数据。再计算一些动态宽高时可以使用。 调用一次后需要注销这个监听,否则会...

火云 ⋅ 2015/12/22 ⋅ 0

Material Design 初步

Material Design 初步 1、Activity设置主题 android:theme="@style/AppTheme.main"

CrazyManDF ⋅ 2016/03/16 ⋅ 0

Android开发之细说ListView上拉加载,下拉刷新过程

下拉刷新------- 1.addHeaderView必须在setAdapter之前调用 2.将paddingTop设置一个headerView高度的负值去隐藏它 getHeight()和getMeasuredHeight()的区别: getMeasuredHeight():获取测量完...

Angels_安杰 ⋅ 2015/11/23 ⋅ 0

android中getViewTreeObserver在触发OnGlobalLayoutListener事件后为啥要移除监听器呢

如题 android中getViewTreeObserver在触发OnGlobalLayoutListener事件后为啥要调用removeOnGlobalLayoutListener方法移除监听器呢...

source&code ⋅ 2014/04/11 ⋅ 1

关于SwipeRefreshLayout 弹出的问题 进来默认代码初始状态不弹开(就3步)

版权声明:本文为博主原创文章,未经博主允许不得转载。 1、首先重写SwipeRefreshLayout import android.content.Context; import android.support.v4.widget.SwipeRefreshLayout; import an...

V_joy ⋅ 2016/08/27 ⋅ 0

获取Android控件尺寸

获取系统的高度和宽度 * 获取显示屏幕的高度 * @return */private int getScreenHeight() {WindowManager windowManager = mainActivity.getWindowManager();Display display = windowManag......

CrazyManDF ⋅ 2016/06/14 ⋅ 0

Android登陆页面软键盘弹起避免遮挡按钮实现

1.之前在写登陆页面的时候,没有在意软键盘遮挡登陆按钮问题,今天想要实现这个功能,才知道自己当初真的是太年轻. 我本来以为Actviity设置下android:windowSoftInputMode="adjustResize"就可以...

正阳Android ⋅ 2017/11/28 ⋅ 0

在onCreate方法中获取某个View的宽度和高度

有时候需要在onCreate方法中知道某个View组件的宽度和高度等信息,而直接调用View组件的getWidth()、getHeight()、getMeasuredWidth()、getMeasuredHeight()、getTop()、getLeft()等方法是无...

九洲北研 ⋅ 2012/11/06 ⋅ 0

android 动态改变图片大小

在oncreate中,使用getheight等函数不能获得控件大小,得到的为0 应使用其他方法 Resources res = getResources(); final ImageView view=(ImageView)findViewById(R.id.IV_about); final D......

elvvvin ⋅ 2014/08/15 ⋅ 0

Android两层布局,键盘弹出时,底层保持不动,上层顶上去

参考项目KeyboardVisibilityEvent 1、AndroidManifest.xml中activity不设置android:windowSoftInputMode属性或者设置为adjustUnspecified 2、修改过后的KeyboardVisibilityEvent代码 3、布局......

GalaxyBruce ⋅ 2016/08/12 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

开启Swarm集群以及可视化管理

在搭建的两台coreos服务器上开启swarm集群 前置条件: docker均开启2375端口 同一个局域网内 主服务器上安装Portainer容器 安装Portainer容器执行: docker run -d -p 9000:9000 --restart=a...

ykbj ⋅ 3分钟前 ⋅ 0

单例设计模式

1、单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例 2、饿汉式单例类 在这个类被加载时,静态变量instance会被初始化,此时类的私有构造子会被调用 饿汉式是典型...

职业搬砖20年 ⋅ 8分钟前 ⋅ 0

前端基础(四):前端国际规范收集

字数:1142 阅读时间:5分钟 前言 由于前端技术的灵活性和杂乱性,导致网上的许多解决方案不够全面甚至是完全错误,容易起到误导作用。所以,我对搜索到的解决方案往往是存疑态度。那么,如何...

老司机带你撸代码 ⋅ 10分钟前 ⋅ 0

Failed to open/create Network-VirtualBox Host-Only

虚拟机版本 : Oracle Vm VirtualBox 5.2.12 报错时机:开网卡二,重启虚拟机报错 "Failed to open/create the internal network 'HostInterfaceNetworking-VirtualBox Host-Only Ethernet Ada......

p至尊宝 ⋅ 13分钟前 ⋅ 0

三分钟学会如何在函数计算中使用 puppeteer

摘要: 使用 puppeteer 结合函数计算,可以快速的构建弹性的服务完成各种功能,包括:生成网页截图或者 PDF、高级爬虫,可以爬取大量异步渲染内容的网页、模拟键盘输入、表单自动提交、登录网...

阿里云云栖社区 ⋅ 16分钟前 ⋅ 0

springMVC接收表单时 Bean对象有Double Int Char类型的处理

前台ajax提交表单price为double类型 后台controller就介绍不到 400错误 前台 实体类: public class ReleaseMapIconConfig{ private String id; private long maxValue; private long minVal......

废柴 ⋅ 19分钟前 ⋅ 0

ZOOKEEPER安装

工作需要在ubuntu上配置了一个zookeeper集群,有些问题记录下来。 1. zookeeper以来java,所以首先要安装java。但是ubuntu系统有自带的jdk,需要通过命令切换java版本: $ sudo update-alter...

恰东 ⋅ 22分钟前 ⋅ 0

linux 进程地址空间的一步步探究

我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核空间。其实,这个4G的地址空间是不存在的,也就是我们所说的虚拟内存空间。 那虚拟内存空间...

HelloRookie ⋅ 22分钟前 ⋅ 0

myatis #{}与${}区别及原理

https://blog.csdn.net/wo541075754/article/details/54292751

李道福 ⋅ 25分钟前 ⋅ 0

三分钟学会如何在函数计算中使用 puppeteer

摘要: 使用 puppeteer 结合函数计算,可以快速的构建弹性的服务完成各种功能,包括:生成网页截图或者 PDF、高级爬虫,可以爬取大量异步渲染内容的网页、模拟键盘输入、表单自动提交、登录网...

猫耳m ⋅ 26分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部