android 事件分发与滑动冲突
来源:互联网 发布:经传指标公式源码 编辑:程序博客网 时间:2024/06/06 14:29
/**
* 当事件发生之后,其传递的顺序是Activity–>Window–>DecorView–>viewGroup
* 随后,根ViewGroup会接收到事件的传递.
*
* 1 ViewTree的分发:
* 将整个的视图看成是一个视图树,当有一个事件产生的时候,
* ViewGroup会分发事件,调用dispatchTouchEvent事件,
* 方法存在boolean返回值,当返回true时表示次控件要消耗事件,
* 事件停止向下分发.
*
* 2 事件序列的分发,首先分发Down事件,当存在控件要消耗该事件时,
* ViewTree会记录该控件,并将剩下的事件序列都交给它处理.
*
* 3 对于ViewGroup而言,其首先会调用 dispatchTouchEvent 方法来分发事件
* 在其内部,会调用onInterceptTouchEvent 方法拦截事件.
* 当拦截方法返回true,表示拦截,那么事件就会交给onTouchEvent 方法
* 当拦截方法返回false,事件就会交给子控件处理
*
* 4 对于控件而言,如果设置了setOnTouchListener监听器,其会调用
* onTouch 方法,如果 方法返回true,则控件的onTouchEvent 不会被调用
* 否则就会调用onTouchEvent方法,来处理点击事件,要设置控件的onTouch事件,控件的属性必须是enable.
*
*
* 对于一个控件而言,一旦 它决定拦截,那么事件序列都由它来处理,并且拦截事件不会再调用
* 对于一个控件而言,如果它不消耗action_down事件,那么其他的事件都会交给它父类处理
* 当ViewGroup中的子控件都不处理事件时,会调用ViewGroup的ontouch
* 事件,默认调用super.dispatchTouchEvent交给Activity处理
*/
解决滑动冲突的伪代码:
@Override public boolean onInterceptTouchEvent(MotionEvent ev) { boolean intercepted=false; int x=(int) ev.getX(); int y=(int) ev.getY(); switch(ev.getAction()){ case MotionEvent.ACTION_DOWN: intercepted=false; break; case MotionEvent.ACTION_MOVE: if(父类需要当前点击事件){ intercepted=true; }else{ intercepted=false; } break; case MotionEvent.ACTION_UP: intercepted=false; break; } return intercepted; }
- android 事件分发与滑动冲突
- Android事件分发机制与滑动冲突
- android事件分发与滑动冲突
- Android滑动冲突与事件分发机制浅析
- Android View的事件分发机制与滑动冲突解决方案
- 事件分发机制与滑动冲突
- Android事件分发和滑动冲突
- 【Android View事件分发机制】滑动冲突
- Android事件分发机制、滑动冲突解决
- android-事件分发:弹性滑动、滑动冲突等
- Android自定义View探索(三)—事件分发机制与滑动冲突处理
- 【Android API】Android事件分发机制和滑动冲突
- 通过事件分发机制处理ListView与ScrollView滑动冲突
- Android事件分发机制以及滑动冲突处理
- Android 滑动冲突,事件分发机制的详解
- Android View事件分发机制及View的滑动冲突
- Android事件分发机制及滑动冲突处理的几篇博文
- Android View的事件分发机制和滑动冲突解决方案
- 【Apache-Shiro】shiro配置详解
- 搜索框输入特殊字符后台的简单处理方式
- python 统计文本单词数-字典排序
- CString中字符的判断
- Fragment add、remove、delete、show、hide源代码阅读
- android 事件分发与滑动冲突
- div里面的div垂直居中
- Android热修复_待修复dex打包详细流程
- 扒一扒HTTPS网站的内幕
- Android 状态栏,标题栏,屏幕高度获取总结
- ScrollIndicatorView自定义控件---类似于页签
- Android应用程序方法名超过65K解决方法
- 使用PowerMock和Easymock进行单元测试
- 使用Spring Security实现权限管理