再谈事件分发再谈事件分发
再谈事件分发再谈事件分发
前言前言
“大哥大哥,快来,领导叫你过去面试!!”
“来了来了!”
看了看简历,面试的是中级安卓开发。
“你来说一下安卓事件分发机制吧!”
…
“大哥,老实说,事件分发我也不咋会,还幸亏你面试我的时候高抬贵手,没问我,要问我的话我就进不来咱们公司了!”
“抬啥手,你面试的时候面试的是实习生,我问你这干啥?”
“奥,好吧。。。。话说回来,大哥,你能给我讲讲事件分发嘛?”
“行吧,那就给你从头到尾说一遍吧,这个以后都会有用的。”
“谢谢大哥,我去给大哥泡咖啡!!!”
正文正文
事件分发,安卓开发中老生常谈的一个问题了,不仅仅是为了应付面试,实际工作中也会经常用到(这里要说明一下,平时尽
量要把知识学习的牢固一些,不要等到面试了才临时抱佛脚)。下面我会将事件分发好好扒一扒!
Activity构成构成
“小子,给我说一下Activity的构成吧!”
“构成?Activity不就是Activity嘛!啥构成啊?”
“。。。。。。记好了。。。。。。”
一个Activity包含了一个Window对象,Window是由PhoneWindow来实现的。PhoneWindow将DecorView作为整个应用窗口的
根View,而这个DecorView又将屏幕划分为两个区域:一个是 TitleView,另一个是ContentView,而我们平时所写的就是展示
在ContentView中的。
“好像有点明白了,但是大哥,这和事件分发有什么关系呢?”
“猴急的性子就是改不了,马上要说了!”
事件类型事件类型
触摸事件对应的是MotionEvent类,事件的类型主要有以下三种:
ACTION_DOWN 在屏幕按下时触发
ACTION_MOVE 在屏幕上滑动时触发(移动的距离超过一定的阈值才会被判定为ACTION_MOVE操作)
ACTION_UP 在屏幕抬起时触发
ACTION_CANCLE 当滑动超出控件边界时触发
“大哥,你刚刚说的阈值到底是多少啊?我记得以前看别人写的博客也这样说的,但一直没搞明白阈值到底是多少?”
“不错不错,小子,求知欲很强嘛!”
TouchSlop(系统常量)表示最小移动阈值,默认值一般为8dp。这个相信都能明白,意思就是如果你滑动小于这个值的话系
统就会认为你这不属于滑动事件。这里需要注意,有的手机厂商为了“提高用户体验”,重新设置了这个值的大小,如果不确定
可以打印下看看。
Log.i("ViewConfiguration", "TouchSlop=" + ViewConfiguration.get(this).scaledTouchSlop)
下面是执行结果:
2020-05-07 22:12:35.939 12599-12599/com.zj.weather I/ViewConfiguration: TouchSlop=21
“明白了吗?”
“呃呃。。。大哥你继续讲吧,我能听懂!”