您的位置:首页 > 移动开发 > Android开发

Android 简述事件分发机制

2016-10-14 19:08 225 查看

1.ViewGroup有三个方法:

Touch 事件相关方法方法功能标记
dispatchTouchEvent(MotionEvent ev)事件分发1
onInterceptTouchEvent(MotionEvent ev)事件拦截2
onTouchEvent(MotionEvent ev)处理事件3

这样,ViewGroup和View对应的方法:

ViewGroup/View方法
ViewGroup1、2、3
View1、3

第一次进入ViewGroup:

走1:

Return true:停止传递,直接走自己的3方法

False:传给下一个ViewGroup的1方法

Return super.dispatchTouchEvent(ev):走自己的2方法—–>

走2:

True:停止传递,走自己的3方法

False:传给下一个View的1方法

Return super.onInterceptTouchEvent(ev):走自己的3方法(与true相同)—–>(默认的是父类拦截)

走3:

True:自己处理掉事件

False:事件向上传递,由上一级的3处理

Return super.onTouchEvent(ev):事件向上传递,由上一级的3处理(与false相同)—->

事件回传的时候走的是各自View的3方法:

true:在当前View消费掉事件

False:返到上一级,由上一级的onTouchEvent处理—->

上一级返回为true就处理;返回false就接着往上一级传递!如果最外层的View没有处理,事件消失。

如果按住控件不放,再移到其它地方,事件就会取消。

对应图示:



2.焦点冲突

比如:ListView条目点击事件,里面的子view还有点击事件:在item的根节点里面设置:

android:descendantFocusability=“blocksDescendants”


3.请求父容器不要拦截我的事件:

getParent().requestDisallowInterceptTouchEvent(false);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: