Android--ViewTreeObserver介绍

本文介绍了Android中ViewTree和ViewTreeObserver的概念。ViewTree是视图和视图组在布局中的树形结构,而ViewTreeObserver用于监听视图树全局变化,如布局、绘画、触摸模式等。通过示例,详细讲解了如何获取控件宽高、启动帧动画以及监听焦点变化,是学习Android视图交互的重要知识点。
摘要由CSDN通过智能技术生成

1、ViewTree

首先我们来介绍一下 ViewTree 也就是视图树是什么。

View 和 ViewGroup 是 Android UI 的基本组件, 而 ViewGroup 作为容器,可以包含一组 View, 并且 ViewGroup 其本身就是 View 的扩展。

而各种不同的 Widgets 像 TextView,Button 等等也是View的扩展,只不过是放在各种 Layout 里,比如 LinearLayout,RelativeLayout。而 Layout 却是 ViewGroup 的子类。

而 ViewTree 就是各种 View 和 ViewGroup 放在一个 Layout 里组成的树形结构。我们用 XML 编写的布局就是依照 ViewTree 结构层层叠加的。

2、ViewTreeObserver

ViewTreeObserver 是一个注册监听视图树的观察者(observer),会监听视图树发生全局变化时发出的通知。这个全局事件包括整个树的布局,从绘画过程开始,触摸模式的改变等等。

ViewTreeObserver不能够被应用程序实例化,因为它是由视图提供,通过 view.getViewTreeObserver() 方法获取。

简单的说,这是个 view 事件的观察者。要注意的是它的初始化就是调用View.getViewTreeObserver(),所以要使用 ViewTreeObserver 的方法也是使用这样来获得 ViewTreeObserver 对象再调用方法。

3、内部接口

名字 说明
OnDrawListener 当在一个视图树绘制时,所要调用的回调函数的接口类,与OnPreDrawListener不同的是,不能在这个接口中取消绘制过程
OnGlobalFocusChangeListener 当在一个视图树中的焦点状态发生改变时,所要调用的回调函数的接口类
OnGlobalLayoutListener 当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时,所要调用的回调函数的接口类
OnPreDrawListener 当一个视图树将要绘制时,所要调用的回调函数的接口类
OnScrollChangedListener 当一个视图树中的一些组件发生滚动时,所要调用的回调函数的接口类
OnTouchModeChangeListener 当一个视图树的触摸模式发生改变时,所要调用的回调函数的接口

4、公共方法

1.

/*
 * 注册一个回调函数,当在一个视图树绘制时调用这个回调函数。
 */
public void addOnDrawListener (ViewTreeObserver.OnDrawListener listener)

2.

/*
 * 注册一个回调函数,当在一个视图树中的焦点状态发生改变时调用这个回调函数。
 */
public void addOnGlobalFocusChangeListener (ViewTreeObserver.OnGlobalFocusChangeListener listener)

3.

/*
 * 注册一个回调函数,当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时调用这个回调函数。
 */
public void addOnGlobalLayoutListener (ViewTreeObserver.OnGlobalLayoutListener listener)

4.

/*
 * 注册一个回调函数,当一个视图树将要绘制时调用这个回调函数。
 */
public void addOnPreDrawListener (ViewTreeObserver.OnPreDrawListener listener)

5.

/*
 * 注册一个回调函数,当一个视图发生滚动时调用这个回调函数。
 */
public void addOnScrollChangedListener (ViewTreeObserver.OnScrollChangedListener listener)

6.

/*
 * 注册一个回调函数,当一个触摸模式发生改变时调用这个回调函数。
 */
public void addOnTouchMo
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值