关于 getViewTreeObserver
2015-06-24 11:21
246 查看
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()中获取控件高度与宽度
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();
}
});
2,启动帧动画
使用ViewTreeObserver.OnPreDrawListener listener:当一个视图树将要绘制时产生事件,可以添加一个其事件处理函数:onPreDraw
OnPreDrawListener opdl=new OnPreDrawListener(){
@Override
public boolean onPreDraw() {
animDraw.start();
return true;
}
};
//onCreate方法中
imageV.getViewTreeObserver().addOnPreDrawListener(opdl);
view也有onfocusChangedListener,是不是有些重复呢,这些回调肯定和view中的对应的回调有关联的,只不过这里的是有Global这个关键字,范围更大,其他的用处深入android源码应该可以找到挺多的,待补充吧。
参考:http://www.cnblogs.com/hellope/archive/2011/08/23/2150094.html
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()中获取控件高度与宽度
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();
}
});
2,启动帧动画
使用ViewTreeObserver.OnPreDrawListener listener:当一个视图树将要绘制时产生事件,可以添加一个其事件处理函数:onPreDraw
OnPreDrawListener opdl=new OnPreDrawListener(){
@Override
public boolean onPreDraw() {
animDraw.start();
return true;
}
};
//onCreate方法中
imageV.getViewTreeObserver().addOnPreDrawListener(opdl);
view也有onfocusChangedListener,是不是有些重复呢,这些回调肯定和view中的对应的回调有关联的,只不过这里的是有Global这个关键字,范围更大,其他的用处深入android源码应该可以找到挺多的,待补充吧。
参考:http://www.cnblogs.com/hellope/archive/2011/08/23/2150094.html
相关文章推荐
- java基于正则表达式的域名处理
- JSP页面EL表达式无效的问题
- 取消视图控制器自动横屏
- 家长需谨记:接种各类疫苗的禁忌
- Compiler Error Message: The compiler failed with error code 128. 的问题解决
- apache2部署django的错误
- sharepoint文档库中日期显示详细日期,不显示几天前
- 检查MySQL的健康状况
- mysql命令行的一些小技巧【实用:多屏显示,格式化输出等】
- spring + Shiro 整合
- Thinkphp 伪静态Nginx配置方式
- javascript新手入门必读书籍推荐
- 异步消息的传递-回调机制
- 从卡尔曼滤波到粒子滤波 很详细,很明了。。
- 安卓error opening file:No such file or directory
- PHP定时执行任务的实现
- iostat 等运维命令用法
- GUI(主)线程与子线程之间的通信
- 浏览器和js交互、NPAPI之NPRuntime开发
- 【SQL优化】查询数据库当前会话的连接数