说到Android事件的分发与消费机制,其实主要就是集中到三个方法上,也就是dispatchEvent(分发事件),onInterceptTouchEvent(拦截事件),OnTouchEvent(处理事件).利用这几个方法可以实现一些控件(例如上拉下拉控件)下面先介绍一下这几个方法的使用.
dispatchEvent(分发事件):当触摸事件发生时,由Activity的dispatchEvent接受事件会以隧道方式由最外层的根部元素慢慢向里传递
onInterecptTouchEvent(拦截事件)(最底层的view不会有该事件):拦截事件,当前View的dispatchEvent分发事件默认返回super.dispatchEvent()时,由当前View的onInterecptTouchEvent接受并执行,其返回结果共有三种情况
1.按照系统默认,返回super.onInterecptTouchEvent时,会将事件转移到在下一级的容器里的dispatchEvent分发事件继续执行,或者由当前view的onTouchEvent实现
2.返回true,拦截当前的触摸事件,将其送到当前view的onTouchEvent事件里
3.返回false,不拦截当前的触摸事件,将其送到下一级的dispatchTouchEvent里面处理
onTouchEvent(处理事件):当系统将触摸事件根据隧道方式送到当前view的onTouchEvent,表明让当前的view处理
1.按照系统默认,返回super.onTouchEvent时,与返回false结果差不多
2.返回true,表示事件已经消费完毕,等待下一次事件传入
3.返回false,未能及时消费,将其传到上一层的onTouchEvent处理,直到消费完毕或者到根容器(如果事件一直未处理,则不会有下一次事件),
触摸事件进行中时,如果上一层拦截了事件,则本次触摸事件结束之前,当前层再不会接受触摸事件