ViewTreeObserver
2014-04-01 14:48
597 查看
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()中获取控件高度与宽度
[java] view
plaincopy
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
[html] view
plaincopy
OnPreDrawListener opdl=new OnPreDrawListener(){
@Override
public boolean onPreDraw() {
animDraw.start();
return true;
}
};
//onCreate方法中
imageV.getViewTreeObserver().addOnPreDrawListener(opdl);
view也有onfocusChangedListener,是不是有些重复呢,这些回调肯定和view中的对应的回调有关联的,只不过这里的是有Global这个关键字,范围更大,其他的用处深入android源码应该可以找到挺多的。
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()中获取控件高度与宽度
[java] view
plaincopy
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
[html] view
plaincopy
OnPreDrawListener opdl=new OnPreDrawListener(){
@Override
public boolean onPreDraw() {
animDraw.start();
return true;
}
};
//onCreate方法中
imageV.getViewTreeObserver().addOnPreDrawListener(opdl);
view也有onfocusChangedListener,是不是有些重复呢,这些回调肯定和view中的对应的回调有关联的,只不过这里的是有Global这个关键字,范围更大,其他的用处深入android源码应该可以找到挺多的。
相关文章推荐
- merge源表数据移植到目标表新表数据中
- C++第一周作业
- ie6 兼容 fixed
- cocoapods安装中一种错误的解决方案
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite
- VS2012 无法启动IIS Express Web服务器的解决方案
- ActionBar
- jquery设置元素的readonly和disabled
- VS2012 无法启动IIS Express Web服务器的解决方案
- 轻松打造品牌轻应用:实时Web App开发框架Clouda
- 添加第三方类库造成的linker command failed with exit code 1 (use -v to see invocation)的错误调试
- 百度上线“种子搜索”
- 喜欢把自己静静地
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (一) —— 总览
- easy ui tree json 数据 无法加载的问题
- 稀疏性与L1范数
- 体验常成员函数
- linux i2c驱动架构(史下最全) davinc dm368 i2c驱动分析
- Windows下使用TortoiseGit实现Git的分支实例
- LeetCode :: Reverse Words in a String