事件经过主要的三层,分别是Activity、Layout(多个)、View

三者都拥有dispatchTouchEvent和onTouchEvent方法。

dispatchTouchEvent是用来控制事件分发的(隧道方式传递)。从源码的角度看,其逻辑控制等起主导作用;从使用角度看,在diapatchTouchEvent中用逻辑判断、设置Event的action是个好的方法,而改变其return值会让事件丢失。

onTouchEvent是用来处理、消费事件的。return true标志着事件已被消费;return false标志着事件未被消费,往Layout/Activity方向传递。

Layout除了拥有这两个方法,还独有onInterceptTouchEvent方法。

onInterceptTouchEvent是在事件由Layout分发到View之前的一个拦截机制。因为只通过Layout的dispatchTouchEvent操控只能让事件丢失。

如果onInterceptTouchEvent return true,表明拦截事件,事件就不会继续分发而是跳到Layout的onTouchEvent方法中去处理;return false则事件继续分发。

在众多分析事件机制的文章中,很难看到与onTouch、onClick关联起来的解释。开始时我也拿捏不好onTouch和onTouchEvent的关系。

事实上,onTouch是在onTouchEvent之前执行的。如果onTouch return true,表示事件已经被消费,不会调用onTouchEvent了。

而onClick呢,则是在onTouchEvent的ACTION_DOWN和ACTION_UP都执行完之后,才会触发onClick。也就是说,在此之前任意位置return了true,onClick都不会被调用。

至此,我产生了一个疑问:Android为什么要这么设计事件传递机制?

① onInterceptTouchEvent:是Layout特有的,是给予Layout对于Event的独立把控权,而不是傻傻的等待事件再冒泡传递回onTouchEvent。

② onTouch:区分于onTouchEvent,给开发者不破坏基础事件传递逻辑(比如 Button的onTouchEvent默认的Super.onTouchEvent()里面是有逻辑判断来决定return值)的情况下对事件有自己的把控操纵权。

android 时间传递,Android事件传递相关推荐

  1. Android自定义view之事件传递机制

    Android自定义view之事件传递机制 在上一篇文章<Android自定义view之measure.layout.draw三大流程>中,我们探讨了一下view的显示过程.不太熟悉的同学 ...

  2. Android自定义View2--触摸事件传递机制

    转载文章 :https://juejin.im/post/6844904041487532045#heading-6 https://juejin.im/post/684490389410388378 ...

  3. android viewgroup 事件,android中viewgroup的事件传递分析

    在上一篇中我们分析了从view的dispatchTouchEvent到onTouchListener的onTouch回调到onTouchEvent到onClickLisener的onClickandr ...

  4. android 时间显示格式,Android setting中修改时间显示格式后,桌面的数字时钟widget小部件显示不更新...

    桌面的数字时间的widget的显示主要需要关注的有如下5个. vendor\mediatek\proprietary\packages\apps\DeskClock\src\com\android\a ...

  5. android时间接收器,android – 在飞机模式关闭/打开后,广播接收器在onReceive()中接收的时间太长...

    我创建了一个简单的广播接收器,它工作得很好,除非我打开/关闭空中飞机模式,使用onReceive方法接收广播消息需要将近2分钟.另一件事是,如果我们启动应用程序然后如果我更改Air plane模式(开 ...

  6. Android通知点击事件传递参数

    显示通知 private void processCustomMessage(Context context, Bundle bundle) {RemoteViews customView = new ...

  7. android时间utc,Android获取UTC时间的方式

    第一种: public CharSequence GetUTCTime() { Calendar cal = Calendar.getInstance(Locale.CHINA); int zoneO ...

  8. android时间最大,Android TimePickerDialog设置最大时间

    对于lolipop和更高版本的android,您可以使用此修改过的RangeTimePickerDialog类 (从lolipop,Timepicker默认使用时钟模式(材料设计),因此旧的自定义类将 ...

  9. android 时间颜色,android修改状态栏时间和日期颜色.docx

    an droid修改状态栏时间和日期颜色 条件:手机获取 ROOT权限和安装R.E.管理器,刷入或安装好 Recovery 并备份,我 是在死机后用 Recovery N次恢复试验才成功的. 我的手机 ...

  10. android 时间 毫秒,android 有关毫秒转时间的方法,及时间间隔等

    /** * Created by baiyuanwei on 16/5/3. * * "HH:mm:ss"是24小时制的,"hh:mm:ss"是12小时制. * ...

最新文章

  1. oracle修改备库状态,Oracle-CRSCTL命令显示备库状态不正确
  2. ACM ICPC 2011-2012 Northeastern European Regional Contest(NEERC)A ASCII Area
  3. 面试: String 五连杀 !你还满血吗 ?
  4. SpringMVC使用AOP
  5. CodeForces - 160E Buses and People(线段树+三维偏序)
  6. ETL异构数据源Datax_自增ID增量同步_12
  7. 【JVM】javap命令行分析(a++ + ++a)的虚拟机指令
  8. 设计模式 - 策略模式Strategy
  9. 一些常用的场景进行描述分析(权限管理、6个典型场景)
  10. 如何打开*.caa文件?
  11. unix linux_在Unix桌面环境中创建独特的Linux体验
  12. 2018电影票房分析-谁才是票房之王
  13. 2021年中式面点师(中级)最新解析及中式面点师(中级)模拟考试题库
  14. 使用Sbert预训练的TTS模型《Expressive Text-to-Speech using Style Tag》
  15. 长沙立坤文化怎么样?是骗子公司吗?网友想知道!
  16. cms自动更新php文件,织梦cms内容页修改或者删除文章之后自动更新上下篇或者首页...
  17. 应用商店上架被拒解决办法
  18. 元好问《摸鱼儿-雁邱词》赏析
  19. 算法设计与分析——散列表/哈希表(Hash Table):直接寻址表
  20. BLAM源码解析(四)—— 基于ICP的位姿更新

热门文章

  1. nuget在jenkins上不能自动还原项目依赖包---笔记
  2. [转载]hadoop集群默认配置和常用配置
  3. linux下关于mysqldump备份的.sql导入数据库表数据丢失优化
  4. 使用common-fileUpload制作文件上传【转】
  5. linux ls命令 --time-style选项 日期时间格式控制
  6. linux shell 和 golang 查询服务器硬件信息
  7. golang range 遍历读写数据问题
  8. postgresql 数据库 客户端认证
  9. 一句话反弹shell
  10. 使用Wireshark分析工控协议