Android事件分发详解(二)——Touch事件传入到Activity的流程
发布日期:2021-06-30 11:16:29
浏览次数:2
分类:技术文章
本文共 2235 字,大约阅读时间需要 7 分钟。
PS:该系列博客已更新,详情请参见:http://blog.csdn.net/lfdfhl/article/details/50707742http://blog.csdn.net/lfdfhl/article/details/50707731http://blog.csdn.net/lfdfhl/article/details/50707724http://blog.csdn.net/lfdfhl/article/details/50707721http://blog.csdn.net/lfdfhl/article/details/50707714http://blog.csdn.net/lfdfhl/article/details/50707713http://blog.csdn.net/lfdfhl/article/details/50707700* Demo描述:
* Touch事件传入到Activity的流程 * * 设备上Touch事件首先是传递到了Activity,再由Activity传递到 * 外层布局ViewGroup,再到内层ViewGroup,最后直到内层ViewGroup里的某个View. * 这就是事件的传递. * * 在此看一下Touch事件传递到Activity,再由Activity传递到外层布局ViewGroup的过程. * 主要看的还是Touch事件由Activity传递到外层布局ViewGroup的过程 * 1 Touch事件传递到Activity的过程. * 该过程有些复杂,能力有限,看不懂;亦不是应用开发的重点,故略过. * 2 Activity传递Touch事件到外层布局ViewGroup的过程 * 首先会传递到Activity的dispatchTouchEvent()方法,源码如下: * public boolean dispatchTouchEvent(MotionEvent ev) { * if (ev.getAction() == MotionEvent.ACTION_DOWN) { * onUserInteraction(); * } * if (getWindow().superDispatchTouchEvent(ev)) { * return true; * } * return onTouchEvent(ev); * } * * (1)onUserInteraction()方法是空方法,暂且不管. * (2)调用getWindow().superDispatchTouchEvent(ev) * 即调用了PhoneWindow的superDispatchTouchEvent(ev)方法. * @Override * public boolean superDispatchTouchEvent(MotionEvent event) { * return mDecor.superDispatchTouchEvent(event); * } * 在该方法中会调用DecorView的superDispatchTouchEvent(event)方法. * DecorView是一个定义在PhoneWindow中的一个内部类.定义如下: * private final class DecorView extends FrameLayout implements RootViewSurfaceTaker{} * 发现没有,它是继承自FrameLayout的?其实,系统会对任意一个Activity的最外层布局嵌套一个FrameLayout. * 嗯哼,是不是暗示着什么........ * 继续看DecorView的superDispatchTouchEvent(event)方法,源码如下: * public boolean superDispatchTouchEvent(MotionEvent event) { * return super.dispatchTouchEvent(event); * } * 在该方法中方法中调用了super.dispatchTouchEvent(event); * 即调用了FrameLayout(也就是ViewGroup)的dispatchTouchEvent(event); * 剩下的流程就和ViewGroup的事件分发一致了. * (3)如果getWindow().superDispatchTouchEvent(ev)方法返回的false即事件未被消费. * 此时if条件不满足,于是代码继续往下执行那么就会调用onTouchEvent(ev) * 也就是Activity的onTouchEvent(MotionEvent event). * 剩下的流程也不用多说了. * * 参考资料: * http://feelyou.info/analyze_android_touch_event/ * Thank you very much */
转载地址:https://it9527.blog.csdn.net/article/details/42241297 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年04月07日 05时29分34秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
C++ 模板2
2019-04-30
C++ 模板3
2019-04-30
Python连接读取SQLServer导入Excel
2019-04-30
C++ 友元
2019-04-30
C++ 友元《二》
2019-04-30
C++ 虚函数表
2019-04-30
C++ 在栈上分配内存
2019-04-30
C/C++之回调函数与函数指针和类成员函数指针
2019-04-30
boost::shared_array
2019-04-30
浅谈C++中指针和引用的区别
2019-04-30
C++学习笔记
2019-04-30
XlFileFormat 枚举 (Excel)
2019-04-30
运行一个dos命令,并返回执行结果
2019-04-30
经典SQL语句大全
2019-04-30
windows 批处理脚本编写
2019-04-30
python爬虫实战
2019-04-30
C++:属性封装
2019-04-30
C++:属性封装
2019-04-30
Objective-c:属性
2019-04-30
C++入门学习:了解封装,类与结构体
2019-04-30