ViewTreeObserver
2015-11-17 22:24
387 查看
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源码应该可以找到挺多的,待补充吧。
相关文章推荐
- HTML经典标签用法
- 冲刺第五天
- Orcale(一)----WIN7 X64下安装ORACLE 10g(检查操作系统版本: 6.1a等问题)
- LinkedIn是如何优化Kafka的
- MSSQL优化之索引优化
- 理解Fragment生命周期
- libtool: Version mismatch error 解决
- Topshelf
- AES加密算法之列混合变换
- linux C 学习 简单字符串逆序输出
- 数组
- AH协议为什么和NAT协议冲突。
- Dark Spots in Avocado
- **PHP分步表单提交思路(分页表单提交)
- css 简析folat
- Java dbf文件写入远程服务器
- 操作系统实验三 进程调度
- 安装nagios4.0.8
- 输入变量相同情况下,结果不正确
- 蒟蒻的trie树专题