android 时间传递,Android事件传递
事件经过主要的三层,分别是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事件传递相关推荐
- Android自定义view之事件传递机制
Android自定义view之事件传递机制 在上一篇文章<Android自定义view之measure.layout.draw三大流程>中,我们探讨了一下view的显示过程.不太熟悉的同学 ...
- Android自定义View2--触摸事件传递机制
转载文章 :https://juejin.im/post/6844904041487532045#heading-6 https://juejin.im/post/684490389410388378 ...
- android viewgroup 事件,android中viewgroup的事件传递分析
在上一篇中我们分析了从view的dispatchTouchEvent到onTouchListener的onTouch回调到onTouchEvent到onClickLisener的onClickandr ...
- android 时间显示格式,Android setting中修改时间显示格式后,桌面的数字时钟widget小部件显示不更新...
桌面的数字时间的widget的显示主要需要关注的有如下5个. vendor\mediatek\proprietary\packages\apps\DeskClock\src\com\android\a ...
- android时间接收器,android – 在飞机模式关闭/打开后,广播接收器在onReceive()中接收的时间太长...
我创建了一个简单的广播接收器,它工作得很好,除非我打开/关闭空中飞机模式,使用onReceive方法接收广播消息需要将近2分钟.另一件事是,如果我们启动应用程序然后如果我更改Air plane模式(开 ...
- Android通知点击事件传递参数
显示通知 private void processCustomMessage(Context context, Bundle bundle) {RemoteViews customView = new ...
- android时间utc,Android获取UTC时间的方式
第一种: public CharSequence GetUTCTime() { Calendar cal = Calendar.getInstance(Locale.CHINA); int zoneO ...
- android时间最大,Android TimePickerDialog设置最大时间
对于lolipop和更高版本的android,您可以使用此修改过的RangeTimePickerDialog类 (从lolipop,Timepicker默认使用时钟模式(材料设计),因此旧的自定义类将 ...
- android 时间颜色,android修改状态栏时间和日期颜色.docx
an droid修改状态栏时间和日期颜色 条件:手机获取 ROOT权限和安装R.E.管理器,刷入或安装好 Recovery 并备份,我 是在死机后用 Recovery N次恢复试验才成功的. 我的手机 ...
- android 时间 毫秒,android 有关毫秒转时间的方法,及时间间隔等
/** * Created by baiyuanwei on 16/5/3. * * "HH:mm:ss"是24小时制的,"hh:mm:ss"是12小时制. * ...
最新文章
- oracle修改备库状态,Oracle-CRSCTL命令显示备库状态不正确
- ACM ICPC 2011-2012 Northeastern European Regional Contest(NEERC)A ASCII Area
- 面试: String 五连杀 !你还满血吗 ?
- SpringMVC使用AOP
- CodeForces - 160E Buses and People(线段树+三维偏序)
- ETL异构数据源Datax_自增ID增量同步_12
- 【JVM】javap命令行分析(a++ + ++a)的虚拟机指令
- 设计模式 - 策略模式Strategy
- 一些常用的场景进行描述分析(权限管理、6个典型场景)
- 如何打开*.caa文件?
- unix linux_在Unix桌面环境中创建独特的Linux体验
- 2018电影票房分析-谁才是票房之王
- 2021年中式面点师(中级)最新解析及中式面点师(中级)模拟考试题库
- 使用Sbert预训练的TTS模型《Expressive Text-to-Speech using Style Tag》
- 长沙立坤文化怎么样?是骗子公司吗?网友想知道!
- cms自动更新php文件,织梦cms内容页修改或者删除文章之后自动更新上下篇或者首页...
- 应用商店上架被拒解决办法
- 元好问《摸鱼儿-雁邱词》赏析
- 算法设计与分析——散列表/哈希表(Hash Table):直接寻址表
- BLAM源码解析(四)—— 基于ICP的位姿更新