Android View的事件分发机制笔记
来源:互联网 发布:c语言能做什么项目 编辑:程序博客网 时间:2024/05/23 22:01
- 涉及到的几个概念:
同一个事件序列:手指接触屏幕的那一刻起,到手指离开屏幕的那一刻结束。这个过程中产生的一系列事件,以down事件开始,中间可能包含多个move事件,最终以up事件结束。正常情况下,一个事件序列只能被一个view拦截且消耗,特殊情况下,这个view也可以将本该自己处理的事件通过onTouchEvent强行传递给子view处理。
- 事件传递规则
public boolean dispatchTouchEvent(MotionEvent ev)用于事件分发。返回结果表示是否消耗当前事件。
public boolean onInterceptTouchEvent(MotionEvent ev)只有ViewGroup有该方法。用来判断是否拦截某个事件。返回结果表示是否拦截当前事件。默认返回false
onTouchEvent(MotionEvent event)具体处理事件。返回结果表示是否消耗当前事件。如果不消耗,在同一个事件序列中,当前view无法再次接受到该事件。
上述3个方法关系伪代码如下(摘自《Android开发艺术探索》):
public boolean dispatchTouchEvent(MotionEvent ev) { boolean consume=false; if(onInterceptTouchEvent(ev)) { consume=onTouchEvent(ev); }else{ consume= child.dispatchTouchEvent();//由下级view的dispatchTouchEvent()决定。 } return consume; }
注意:当一个view被设置了OnTouchListener,这时OnTouchListener中的onTouch方法会优先于这个View的onTouchEvent方法。当且仅当OnTouchListener中的onTouch返回false时View自己的onTouchEvent会被执行。
因此改进后的事件传递伪代码如下:
public boolean dispatchTouchEvent(MotionEvent ev) { boolean consume=disallowIntercept;//由子View设置给父View if(!consume) { consume=onInterceptTouchEvent(ev); } if(consume) { if(mOnTouchListener!=null) { consume=mOnTouchListener.onTouch(this,ev);//优先执行 } if(!consume) { consume=onTouchEvent(ev); } }else{ consume= child.dispatchTouchEvent(); } return consume; }
事件传递顺序:Activity->Window->View
阅读全文
0 0
- Android View的事件分发机制笔记
- 【Android学习笔记】Android中View的事件分发机制
- Android View事件分发机制学习笔记
- Android 学习笔记之四 View的事件分发机制
- Android学习笔记 3.4View的事件分发机制
- android事件分发机制 VIew的事件分发机制
- 笔记:事件分发机制(一):View的事件分发
- View的事件分发机制学习笔记
- Android 事件分发机制解析之View的事件分发
- android中view的事件分发机制
- Android之View的事件分发机制
- Android View的事件分发机制
- Android View的事件分发机制
- Android中View的事件分发机制
- Android View的事件分发机制浅析
- android View的事件分发机制
- Android View的事件分发机制
- Android中View的事件分发机制
- TypeError: __init__() takes exactly 2 arguments (1 given)(已解决)
- Retrofit源码解读(五)--okhttpCall和adapt方法
- 全息投影技术简介
- django框架连接mysql数据配置
- CentOS6.5中安装tomcat
- Android View的事件分发机制笔记
- 第11周项目3-图遍历算法实现(深度优先DFS)
- 基于Spring task注解方式配置任务
- 吴恩达 深度学习 Class1 课程总结及编程实践
- 第八周 【项目2
- Retrofit源码解读(六)--Retrofit中的设计模式
- FPGA1214学习
- HDU 2064 汉诺塔III (递归)
- 第十五周内部排序(2)项目1---(6)堆排序