ViewTreeObserver理解
2016-06-23 20:47
323 查看
ViewTreeObserver类是一个监听View中各种状态(焦点的改变、布局的改变、触摸模式的改变、绘制视图前、滚动状态等)。
获得ViewTreeObserver类实例的方式:
ViewTreeObserver vto = 视图.getViewTreeObserver(); //相应的是处理该视图的事件。
分别实现上述状态改变的方法:
布局的改变:
设置visible和invisible不会回调,因为只是看不到,但是布局没有变化,它还在那里。但是设置了Gone之后就会回调
因为布局发生了改变。
焦点的改变:
在inTouch模式下,在触屏的安卓手机上,系统启动后,一致处于inTouch模式,
处于inTouch模式,所有控件(除了EditText外)不能获得焦点。
Button在点击时,只是单纯的执行了onClick方法,并没有获得焦点。
触摸模式的改变:
在触屏的安卓手机,系统启动后一直处于inTouch模式,所以该方法并没有什么实际的意义。
绘制视图之前:
就是在绘制本视图之前回调的方法。
在测试中发现,无论这个view是可见还是不可见,还是GONE,其一直在回调
滚动状态改变同理。
获得ViewTreeObserver类实例的方式:
ViewTreeObserver vto = 视图.getViewTreeObserver(); //相应的是处理该视图的事件。
分别实现上述状态改变的方法:
布局的改变:
设置visible和invisible不会回调,因为只是看不到,但是布局没有变化,它还在那里。但是设置了Gone之后就会回调
因为布局发生了改变。
ViewTreeObserver.OnGlobalLayoutListener listen =new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { } }; vto.addOnGlobalLayoutListener(listen);//添加监听器
焦点的改变:
在inTouch模式下,在触屏的安卓手机上,系统启动后,一致处于inTouch模式,
处于inTouch模式,所有控件(除了EditText外)不能获得焦点。
Button在点击时,只是单纯的执行了onClick方法,并没有获得焦点。
new ViewTreeObserver.OnGlobalFocusChangeListener(){ @Override public void onGlobalFocusChanged(View oldFocus, View newFocus) { } };
触摸模式的改变:
在触屏的安卓手机,系统启动后一直处于inTouch模式,所以该方法并没有什么实际的意义。
new ViewTreeObserver.OnTouchModeChangeListener() { @Override public void onTouchModeChanged(boolean isInTouchMode) { } };
绘制视图之前:
就是在绘制本视图之前回调的方法。
在测试中发现,无论这个view是可见还是不可见,还是GONE,其一直在回调
new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { return false;//返回false不会显示该视图,连该视图所在的父视图也没有显示。但是虽然看不到,点击相应的位置还是有相应的事件发生。但整个view没法显示出来所以要设置返回true
} };
滚动状态改变同理。
相关文章推荐
- view变化监听器ViewTreeObserver介绍
- Android获取View的宽高
- ViewTreeObserver
- Android ViewTreeObserver简介
- 得到view的信息以及 view绘制流程解析
- 如何在onCreate里面绘制View宽高
- Android中获取View的宽/高的时机
- onCreate回调中获取view大小为0,ViewTreeObserver,无限回调OnGlobalLayoutListener
- Android中获取view的宽高的几种方法
- 【SpringMVC学习07】SpringMVC中的统一异常处理
- android自定义颜色进度条ColorSeekBar
- BZOJ 2432 兔农
- 简析iOS动画原理及实现——Core Animation
- Android杂谈(6)Windows蓝屏可能出现工程莫名全报错
- 关于inflate导入Layout失真(导入的布局,不是自己想要的)
- 数组类模板
- Gradle自定义插件
- 如何使用R来连接各个数据库
- 如何使用mysql(lamp)分离环境搭建dedecms织梦网站及apache服务器常见的403http状态码及其解决方法
- win7 cmd 共享wifi c++