View 触摸事件分发拦截机制(一)
来源:互联网 发布:苹果系统办公软件 编辑:程序博客网 时间:2024/06/16 09:28
四个重要方法
整个事件分发 拦截 处理 主要是靠这四个方法
- dispatchTouchEvent 事件分发方法
- onInterceptTouchEvent 事件拦截方法
- onTouchEvent 事件处理
- requestDisallowInterceptTouchEvent 驳回拦截
@Override public boolean dispatchTouchEvent(MotionEvent ev) { boolean consume=false; if(onInterceptTouchEvent(ev)){ consume=onTouchEvent(ev); }else { consume=child.dispatchTouchEvent(ev); } return consume; }
这是一段伪代码基本把上述的前三个方法关系解释的非常清楚了.
dispatchTouchEvent (MotionEvent ev)
本类的分发者 告诉外界我们怎么搞,已经分发处理
返回值
- true 整个循环结束
- false 表示没人处理
- super 无论是返回true 还是false 都不要这么做 父类已经封装了很多判断,如果直接返回一个true/false,都会影响其它方法(一般不要重写该方法)
dispatchTouchEvent 我是负责事件分发的 事件先到我这了,我就问下onInterceptTouchEvent 事件拦截方法onInterceptTouchEvent(返回true) 我们拦截 这事我们干所以dispatchTouchEvent就调用onTouchEvent来处理onInterceptTouchEvent(返回false) 我们不管 所以dispatchTouchEvent就调用他子View的的dispatchTouchEvent 交给下面做
onInterceptTouchEvent (MotionEvent ev)
本类的消息处理决定者 告诉dispatchTouchEvent我们是否拦截
- true 进行拦截 告诉dispatchTouchEvent我们来处理
- false 不拦截 告诉dispatchTouchEvent我们不管
onTouchEvent(MotionEvent ev)
本类的事件真正的处理者
- true 反馈上级 事情我做了 消耗掉了
- false 反馈上级 这事情我不想做 不做了
@Override public boolean onTouchEvent(MotionEvent ev) { switch (ev.getAction()){ case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_UP: break; } return true; }
一般都会按照上面的写法来处理事件ACTION_DOWN 必定会执行一次,如果除ACTION_DOWN以外的事件没有消耗掉的化,这点击事件就会流失,交给父控件了
requestDisallowInterceptTouchEvent(boolean disallowIntercept)
驳回拦截事件
- true 上级拦截全部无效,这事件交给我
- false 什么也没发生
事件传递规则
- 事件到来向下传递Activity→Window→ViewGroup→View 一层一层向下传递,当有控件拦截时 则不在向下传递
- 事件反馈从下往上传递 自己不处理交给父类来处理
0 0
- View 触摸事件分发拦截机制(一)
- View 触摸事件分发拦截机制(二)
- android触摸传递机制 - 拦截、事件分发
- Android 触摸事件分发和拦截机制
- View事件的分发拦截机制流程
- Android View事件分发、拦截、消费机制
- Android View事件分发、拦截、消费机制
- 触摸事件分发-view
- View触摸事件分发
- android 的触摸事件的分发拦截机制分析
- Android触摸事件分发处理机制详解与源码分析一(View篇)
- Android View中触摸事件分发机制的实现
- Android中单个View的触摸事件分发机制
- Android应用层View触摸事件分发机制
- Android View触摸事件传递机制 一
- 事件分发拦截机制
- 事件分发拦截机制
- View的事件分发机制一:事件分发概述
- spring mvc 小记(六):关于MySql优化
- AndroidTXT阅读器的实现(—)扫描sd卡或选择文件路径添加文件到listview及listview的多选删除
- 矩阵链乘 动态规划
- HiveSQL-datediff函数
- c++第三周初
- View 触摸事件分发拦截机制(一)
- DEV 控件----GridControl
- solr-6.1.0源码分析---4
- 软件测试与软件测试用例
- spring mvc 时间类型传值问题
- mybatis使用及动态sql
- java图形界面设计
- 光敏电阻的简单介绍
- UML里九中图形及举例