Android事件分发浅析及设计模式

news/2024/8/30 23:01:27 标签: 设计模式, 移动开发

android中的事件分发,简单来说就是 dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent。 我们先看看官方文档的说明:

boolean dispatchTouchEvent (MotionEvent ev)

向下传递屏幕的触摸事件给目标视图,如果自己是目标视图责传递给自己。返回值True:如果事件被当前视图处理;false:没有处理,责不会接收到后面的消息。

boolean onInterceptTouchEvent (MotionEvent ev)

执行该方法来截断数模事件。消息会按照以下顺序接收:

  1. 先收到down消息。
  2. down消息可以被子view处理,也可以给自己的onTouchEvent处理。如果自己的onTouchEvent处理了,那么返回true,这个时候会继续收到后面的消息。同样的,如果onTouchEvent返回true,onInterceptTouchEvent就不会收到后面消息,而是在onTouchEvent中收到。
  3. 只要onInterceptTouchEvent返回false,那么所有接下来的消息都会先传递到这,然后传递给目标视图。
  4. 如果返回true,这里不会再接收到任何剩下的消息:所有的消息都会在onTouchEvent中接收,并且目标View会接收到 ACTION_CANCEL消息。(只有目标view在当前手势中收到过down才会收到cancel消息,具体见后面的总结)。 ####boolean onTouchEvent (MotionEventevent) 执行该方法来处理触摸事件。True:事件被处理 , false :不处理。

总结来说: onTouchEvent是最终处理事件的地方。

如果父viewgroup和子view同时有触摸事件的监听,父viewgroup的 dispatchTouchEvent 返回false,则子view和父viewgroup都不会再收到后面的消息了。

如果父viewgroup的onInterceptTouchEvent返回true 则消息交给父layout的onTouchEvent处理,父viewgroup的onInterceptTouchEvent不会收到消息,子view也不会收到任何消息;false则交给子view的onTouchEvent去处理,父viewgroup的onInterceptTouchEvent,任然会收到消息。

如果子view的onTouchEvent 返回false,则会在父viewgroup的onTouchEvent处理。

另外父viewgroup 不拦截第一个down事件,拦截后续事件的时候,子view才会收到cancel事件。

关于使用到设计模式,模板模式

模板模式,按照固定的流程,让用户去重写实现自己的方法。

责任链模式,父viewgroup把消息传递给子viewgroup,如果对象不能处理再这样一层层传递消息。

转载于:https://juejin.im/post/5c8752516fb9a049d9760b06


http://www.niftyadmin.cn/n/1839523.html

相关文章

浅谈SYNPROXY

本文主要介绍了SYNPROXY的相关原理、DDoS简述、LVS相关应用等内容。上篇文章回顾:容器进程Core Dump处理SYNPROXY简述SYNPROXY是防御DDoS攻击的有力手段。SYNPROXY是一个TCP握手代理,原生支持是从Linux内核3.13开始的。当一个TCP请求从客户端发出时&…

request.getHeader() 相关详细

2019独角兽企业重金招聘Python工程师标准>>> 在三种情况下,request.getHeader("REFERER")取值 1:通过链接跳过来 2:在地址栏中输入URL,打回车 3:刷新 当链接过来的时候,referer的值…

unity C# 常用算法 和 算法复杂度

1、稳定性 归并排序、冒泡排序、插入排序。基数排序是稳定的 选择排序、快速排序、希尔排序、堆排序是不稳定的 2、时间复杂度 最基础的四个算法:冒泡、选择、插入、快排中,快排的时间复杂度最小O(n*log2n),其他都是O(n2&#xff…

深度学习CTR预估模型凭什么成为互联网增长的关键?

本文是王喆在InfoQ开设的原创技术专栏“深度学习CTR预估模型实践”的第一篇文章(以下“深度学习CTR预估模型实践”简称“深度CTR模型”)。回顾王喆老师过往精彩文章:《重读Youtube深度学习推荐系统论文,字字珠玑,惊为神…

设计模式 —— 原型模式

简介 了解原型模式前,我们先来了解下Java提供两种克隆方式: 浅克隆:被克隆对象的所有变量都含有与原来的对象相同的值,而它所有的对其他对象的引用都仍然指向原来的对象。换一种说法就是浅克隆仅仅克隆所考虑的对象,而…

[基础] ES6 exportimport

import & export 用法 参考文档import 后面路径 核心模块相对路径 ./ 之类的开头如果文件目录下有 package.json,就根据它的 main 字段找到 js 文件如果没有 package.json,那就默认取文件夹下的 index.js。当前 package 的 node_modules 里面找当前 …

Elasticsearch最佳实践之分片使用优化

本文由云社区发表 作者:老生姜 一、遇到的问题 与大多数分布式系统一样,Elasticsearch按照一定的Hash规则把用户数据切分成多个分片,然后打散到不同机器进行存储,从而实现大规模数据的分布式存储。 cluster.png然而在一些复杂的应…

深入理解JavaScript作用域和作用域链

作者:浪里行舟经授权转载,版权归原作者所有。 前言 JavaScript 中有一个被称为作用域(Scope)的特性。虽然对于许多新手开发者来说,作用域的概念并不是很容易理解,本文我会尽我所能用最简单的方式来解释作用域和作用域链&#xff0…