监听视图树 ViewTreeObserver 获取View的宽高
前奏:在哪里可以获取到View的宽高
官方文档简介
内部接口
- 回调方法 public void onDraw()
- Interface definition for a callback to be invoked when the view tree is about to将要 be drawn.
- At this point, views cannot be modified in any way.
- Unlike with OnPreDrawListener, this method cannot be used to cancel the current drawing pass.
- An OnDrawListener listener cannot be added or removed from this method.
OnGlobalFocusChangeListener:当在一个视图树中的焦点状态发生改变时回调
- 回调方法 public void onGlobalFocusChanged(View oldFocus, View newFocus);
- Interface definition for a callback to be invoked when the focus state焦点状态 within the view tree changes.
- When the view tree transitions from touch mode to non-touch mode, oldFocus is null.
- When the view tree transitions from non-touch mode to touch mode, newFocus is null.
- When focus changes in non-touch mode (without transition from or to touch mode) either oldFocus or newFocus can be null.
OnGlobalLayoutListener:当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时回调
- 回调方法 public void onGlobalLayout();
- Interface definition for a callback to be invoked when the global layout state布局状态 or the visibility of views within the view tree changes.
OnPreDrawListener:当一个视图树将要绘制时回调
- 回调方法 public boolean onPreDraw(); Return true to proceed with the current drawing pass, or false to cancel.
- Interface definition for a callback to be invoked when the view tree is about to将要 be drawn.
- At this point, all views in the tree have been measured and given a frame.
- Clients can use this to adjust适应 their scroll bounds or even to request a new layout before drawing occurs.
OnScrollChangedListener:当一个视图树中的一些组件发生滚动时回调
- 回调方法 public void onScrollChanged();
- Interface definition for a callback to be invoked when something in the view tree has been scrolled滚动.
OnTouchModeChangeListener:当一个视图树的触摸模式发生改变时回调
- 回调方法 public void onTouchModeChanged(boolean isInTouchMode); True if the view hierarchy is now in touch mode, false otherwise.
- Interface definition for a callback to be invoked when the touch mode触摸方式 changes.
OnWindowAttachListener:
- 回调方法 public void onWindowAttached(); 和 public void onWindowDetached();
- Interface definition for a callback to be invoked when the view hierarchy视图数 is attached to and detached from its window.
OnWindowFocusChangeListener:
- 回调方法 public void onWindowFocusChanged(boolean hasFocus); Set to true if the window is gaining focus, false if it is losing focus.
- Interface definition for a callback to be invoked when the view hierarchy's window focus state窗口焦点 changes.
公共方法
- void addOnDrawListener(ViewTreeObserver.OnDrawListener listener):Register a callback to be invoked when the view tree is about to be drawn.
- void addOnGlobalFocusChangeListener(ViewTreeObserver.OnGlobalFocusChangeListener listener):Register a callback to be invoked when the focus state within the view tree changes.
- void addOnGlobalLayoutListener(ViewTreeObserver.OnGlobalLayoutListener listener):Register a callback to be invoked when the global layout state or the visibility of views within the view tree changes
- void addOnPreDrawListener(ViewTreeObserver.OnPreDrawListener listener):Register a callback to be invoked when the view tree is about to be drawn
- void addOnScrollChangedListener(ViewTreeObserver.OnScrollChangedListener listener):Register a callback to be invoked when a view has been scrolled.
- void addOnTouchModeChangeListener(ViewTreeObserver.OnTouchModeChangeListener listener):Register a callback to be invoked when the invoked when the touch mode changes.
- void addOnWindowAttachListener(ViewTreeObserver.OnWindowAttachListener listener):Register a callback to be invoked when the view hierarchy is attached to a window.
- void addOnWindowFocusChangeListener(ViewTreeObserver.OnWindowFocusChangeListener listener):Register a callback to be invoked when the window focus state within the view tree changes.
- void removeGlobalOnLayoutListener(ViewTreeObserver.OnGlobalLayoutListener victim):This method was deprecated in API level 16. Use removeOnGlobalLayoutListener instead
- void removeOnGlobalLayoutListener(ViewTreeObserver.OnGlobalLayoutListener victim):Remove a previously installed global layout callback
- final void dispatchOnDraw():Notifies registered listeners that the drawing pass is about to start.
- final void dispatchOnGlobalLayout():Notifies registered listeners that a global layout happened.
- final boolean dispatchOnPreDraw():Notifies registered listeners that the drawing pass is about to start.
- boolean isAlive():Indicates指示、判断 whether this ViewTreeObserver is alive是否可用.
案例:获取View的宽高
}
监听视图树 ViewTreeObserver 获取View的宽高的更多相关文章
- 监听视图树 OnGlobalLayoutListener
背景 我们都知道在onCreate()里面获取控件的高度是0,这是为什么呢?我们来看一下示例: 首先我们写一个控件 public class MyImageView extends ImageView ...
- 在渲染前获取 View 的宽高
在渲染前获取 View 的宽高 这是一个比较有意义的问题,或者说有难度的问题,问题的背景为:有时候我们需要在view渲染前去获取其宽高,典型的情形是,我们想在onCreate.onStart.onRe ...
- 用addOnGlobalLayoutListener获取View的宽高
首先,我们在onCreate方法里调用getHeight()和 getWidth()是不能正确获取View的宽高的,因为onCreate方法执行完了,我们定义的控件才会被onMeasure()度量,所 ...
- 通过View.post()获取View的宽高
在Android里,获取View宽高的时机是个老生常谈的话题了.众所周知,在Oncreate里直接调用View.getWidth或者View.getMeasuredWidth返回都是0.所以获取宽高时 ...
- Android查缺补漏(View篇)--在 Activity 的 onCreate() 方法中为什么获取 View 的宽和高为0?
在 Activity 的 onCreate() 方法中为什么获取 View 的宽和高为0 ? @Override protected void onCreate(Bundle savedInstanc ...
- JS获取元素的宽高以及offsetTop,offsetLeft等的属性值
基本介绍 $(obj).width()与$(obj).height() $(obj).width()与$(obj).height() :jquery方式获取元素的宽高,不包括滚动条与工具条 $(obj ...
- JS基础篇--JS获取元素的宽高以及offsetTop,offsetLeft等的属性值
$(obj).width()与$(obj).height() $(obj).width()与$(obj).height() :jquery方式获取元素的宽高,不包括滚动条与工具条 $(obj).wid ...
- js获取隐藏元素宽高的方法
网上有一些js获取隐藏元素宽高的方法,但是可能会存在某些情况获取不了. 例如: <!DOCTYPE html> <html lang="en"> <h ...
- js判断图片加载完成后获取图片实际宽高
通常,我们会用jq的.width()/.height()方法获取图片的宽度/高度或者用js的.offsetwidth/.offsetheight方法来获取图片的宽度/高度,但这些方法在我们通过样式设置 ...
随机推荐
- count 【mysql】
如果你的需要是统计总行数时,为什么要使用count(*),而避免使用指定具体的列名? count()函数里面的参数是列名的的时候,那么会计算这个字段有值项的次数.也就是,该字段没有值的项并不会进入计算 ...
- [leetcode tree]100. Same Tree
判断输入的两棵树是不是相同 判断当前root值,左子树和右子树是否相同 ####注意最后用的是 is 而不是 ==,因为最后判断p和q是不是None, 应该判断是不是同一个对象 class Solut ...
- 移动端meta标签
现在的手机或平板电脑等移动设备上的浏览器默认都有双击放大的设置,如何阻止双击放大?user-scalable=no <!-- 禁止缩放 --> <meta name=”viewpor ...
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
登录服务器,使用root用户连接mysql时出现错误提示: $ bin/mysql -uroot -p Enter password: ERROR (HY000): Can't connect to ...
- 【漏洞预警】CVE-2017-8464 震网三代漏洞复现
早在6月13日,微软发布补丁修复编号为CVE-2017-8464的漏洞,本地用户或远程攻击者可以利用该漏洞生成特制的快捷方式,并通过可移动设备或者远程共享的方式导致远程代码执行,追溯到以前,NSA就承 ...
- 程序逻辑问题---Writeup
原题地址:http://ctf5.shiyanbar.com/web/5/index.php 打开后是一处登陆界面 右键查看源代码 发现有一处txt文件 很明显就是程序的源代码 可以看到其中一句 $s ...
- Codeforces Round #234 (Div. 2) A. Inna and Choose Options 模拟题
A. Inna and Choose Options time limit per test 1 second memory limit per test 256 megabytes input st ...
- Caffe2(3)----下载现成的模型并使用
Caffe2训练好的模型可在Model Zoo下载,下载的命令很简单,接下来以下载和使用squeezenet为例,进行简单说明. 1.浏览可下载的模型 已有模型都放在github上,地址:https: ...
- MySQL DB 主从复制之SSL
需求架构 准备工作 主从服务器时间同步 # 主从服务器同时配置crontab任务,与NTP服务器同步时间即可 */5 * * * * ntpdate 172.16.0.1 &>/dev/ ...
- Python threads synchronization: Locks, RLocks, Semaphores, Conditions, Events and Queues(Forwarding)
This article describes the Python threading synchronization mechanisms in details. We are going to s ...