Android 事件分配机制
来源:互联网 发布:xp怎么打开445端口 编辑:程序博客网 时间:2024/06/06 02:03
android系统中的每个View的子类都具有下面三个和TouchEvent处理密切相关的方法:
1)public boolean dispatchTouchEvent(MotionEvent ev) 这个方法用来分发TouchEvent
2)public boolean onInterceptTouchEvent(MotionEvent ev) 这个方法用来拦截TouchEvent ,仅ViewGroup及其子类有
3)public boolean onTouchEvent(MotionEvent ev) 这个方法用来处理TouchEvent
当TouchEvent发生后,
1、首先Activity将TouchEvent传递给最顶层的View, TouchEvent最先到达最顶层 view 的 dispatchTouchEvent ;
2、然后由最顶层 view的 dispatchTouchEvent 方法进行分发,
3、如果dispatchTouchEvent返回true ,则交给这个view的onTouchEvent处理;
4、如果dispatchTouchEvent返回 false ,则交给这个 view 的 interceptTouchEvent 方法来决定是否要拦截这个事件,
5、如果oninterceptTouchEvent 返回 true ,也就是拦截掉了,则交给它的 onTouchEvent 来处理,
6、如果oninterceptTouchEvent 返回 false ,那么就传递给子 view ,
7、由子 view 的 dispatchTouchEvent 再来开始这个事件的分发。
8、如果事件传递到某一层的子 view 的 onTouchEvent 上了,这个方法返回了 false ,那么这个事件会从这个 view 往上传递,都是 onTouchEvent 来接收。而如果传递到最上面的 onTouchEvent 也返回 false 的话,这个事件就会“消失”,而且接收不到下一次事件。
首先触摸事件发生时(ACTION_DOWN),由系统调用Activity的dispatchTouchEvent方法,分发该事件。根据触摸事件的坐标,将此事件传递给out的dispatchTouchEvent处理,out则调用onInterceptTouchEvent
总结:
1. onInterceptTouchEvent中有个Intercept,这是什么意思呢?她叫拦截,你大概知道她作用了吧,她就是你的亲亲小秘书,有什么事,先找秘书,秘书来决定这个事要不要你亲自处理,既然是秘书,是不是每个人都能有呢?当然不是,这个秘书只是viewgroup的,所以只有继承viewgroup的控件才有,那些textview啊button啊什么的,肯定是没有的,为什么?因为他级别不够(继承自view),是不能有秘书滴,注意,如果本级领导决定去的话,那后面的通知就不经过这一级的小秘了,直接发领导。
2. 事件的传递顺序,依次发生的是ACTION_DOWN从父控件传向子控件,然后是ACTION_MOVE(可能出现,也可能不出现),最后是ACTION_UP,注意是按顺序从父控件传向子控件,手机上ACTION_MOVE和ACTION_UP基本是都会出现的,是因为手机的传感器很敏感,但是模拟器就不一样,如果没有滑动,是不会出现action_MOVE的,所有的事件,ACTION_DOWN、ACTION_MOVE和ACTION_UP都首先发自根控件(布局文件中最外面一层)的onInterceptTouchEvent中,也就是说,每一个控件都首先会收到onInterceptTouchEvent事件(当然你必须有这个能力收到,原因看上面)
3. 有小秘了,有事件了,那就该有领导了,onTouchEvent就是领导了,是处理具体的事件的,领导会首先收到小秘发的ACTION_DOWN事件,领导一看, 哇,小秘发的来的,赶紧瞅瞅,晚上是不是有什么活动,一看,还真有活动,又可以带小秘一起出去high了,过瘾,告诉小秘(return true),参加晚上的活动,然后上级小秘会接着把活动的具体安排(ACTION_MOVE和ACTION_UP)也发过来,都由这个领导处理(注意,具体活动是上级小秘直接通知下级领导(OnTouchEvent)的,这里不再需要下级小秘过滤了,因为小秘打扮去了,晚上要陪领导活动呢),其他领导呢,只能望洋兴叹了 。
(2)如果领导看了,发现不是出去happy的事,这心情郁闷的,又不能跟小秘一起了,这尼玛的,还去个毛啊!不去了!!!告诉小秘呗(return false)不处理,然后小秘就会向上级(父控件)汇报,然后就由上级领导来处理。神马?上级领导不处理,靠,那好吧,都交给他们的祖宗(View)去,查看view源码,你会发现,一样的,如果接受事件,就返回true,接着处理ACTION_MOVE和ACTION_UP,没处理,就返回false,到祖宗这一级了,如果都没人处理,那没办法,这个事件就此消失了,准备处理下一个 。
- Android 事件分配机制
- android的内存分配机制
- android的内存分配机制
- android的内存分配机制
- Android内存分配回收机制
- Android事件分发机制机制
- android 事件传递机制
- android 事件传递机制
- Android 广播事件机制
- Android事件触发机制
- android 事件流转机制
- Android 事件触发机制
- Android事件触发机制
- android事件传递机制
- Android事件处理机制
- android 事件机制
- android 事件处理机制
- android 事件机制
- Android 自定义控件-自动换行的流线性布局-DragFlowLayout
- java 反射获得私有属性的对象
- linux 基础学习 之 VI/VIM 编辑器基础功能
- Win8下用DOSBox编写汇编语言
- 通过registerContentObserver(注册监听者)配合URI来实现恶意敏感信息窃取相关
- Android 事件分配机制
- Java的锁机制解析
- App 性能测试工具
- 八皇后问题(递归)
- Javascript闭包
- 导入maven项目报错处理
- 动态规划--最长公共子序列(LCS).九度1042
- 时间记录—暂行番茄
- 编译spidev_test程序