关于Android事件传递与分发
来源:互联网 发布:autodesk绘图软件 编辑:程序博客网 时间:2024/06/05 12:42
最近在看事件分发方面的知识,主要看了郭神之前的文章Android事件分发机制完全解析,文章由浅入深讲解很细致清晰。里面有这样一句话
“Android中touch事件的传递,绝对是先传递到ViewGroup,再传递到View的”
看到这里就一直想要知道,touch事件是怎么传递到viewgroup的,搜了几篇文章也都没讲清楚。直到看到这篇Android FrameWork——Touch事件派发过程详解,看完不禁无限佩服与感激,解决了我的疑惑,在这里记录下摘要,以备后查。
首先,当手指触摸屏幕,会先走activity的dispatchTouchEvent(MotionEvent ev)方法
public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { onUserInteraction(); } if (getWindow().superDispatchTouchEvent(ev)) { return true; } return onTouchEvent(ev); }
至于为什么走这个方法,该篇文章有详细的讲解,这里就不再深究。这里getWindow()返回的就是PhoneWindow对象,执行superDispatchTouchEvent,就是执行PhoneWindow.superDispatchTouchEvent。这里我们可以看到,如果superDispatchTouchEvent返回true,就不会执行下面的onTouchEvent(ev)方法,此时代表着有子view处理了touch事件。如果返回false,说明没有子view处理事件,最后会返给activity处理。
我们再看PhoneWindow.superDispatchTouchEvent:
@Override public boolean superDispatchTouchEvent(MotionEvent event) { return mDecor.superDispatchTouchEvent(event); --> public boolean superDispatchTouchEvent(MotionEvent event) { return super.dispatchTouchEvent(event); } }
superDispatchTouchEvent最终调用super.dispatchTouchEvent。这里mDector是PhoneWindow.DecorView,它是一个真正Activity的root view,它继承了FrameLayout,通过super.dispatchTouchEvent他会把touchevent派发给各个activity的子view,也就是我们在Activity.onCreat方法中setContentView时设置的view。这里的view最外层都是布局view,也就是都继承了viewgroup,由此,touch事件传递到了viewgroup中。后面的事件分发过程,看完郭神的博客你一定都明白啦。
- 关于Android事件传递与分发
- Android事件分发与传递
- android touch事件传递与分发
- Android焦点事件分发与传递机制
- android key事件分发与焦点事件的传递
- Android事件分发(事件传递机制)
- 【Android】【Framework】Android事件分发(传递)机制
- 关于android事件分发机制
- 关于android事件分发(日记)
- Android 关于事件分发 dispatchTouchEvent
- 关于android事件分发机制
- View 事件传递,分发与拦截
- 图解android焦点传递,事件分发
- android 事件分发传递机制(转)
- android 事件传递及分发机制
- Android事件的分发传递机制
- Android 触摸事件分发传递机制
- Android中触摸事件传递分发机制
- FTPrep, 15 3Sum
- class
- MySQL 修改字段类型或长度
- asp.net core 相关网摘
- NOIP2013火柴排队
- 关于Android事件传递与分发
- 批量查询优化
- tar、jar、war包打包解压
- java.net.UnknownHostException找不到主机[已解决]
- JavaScript 常用方法总结
- hbase shell常用命令行
- Hystrix常见用法说明
- iOS开发之ReactiveCocoa框架(RAC)第五篇队列与高级函数
- 浏览器存储