二、Android事件分发

来源:互联网 发布:login incorrect linux 编辑:程序博客网 时间:2024/05/08 08:43

Android事件分发

涉及类:Activity、ViewGroup、View

Activity、View:dispatchTouchEvent、onTouchEvent
ViewGroup:dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent

事件由1个down,多个move,以及一个up组成。如果down返回false,则后续事件不再接收。

View:
disPatchTouchEvent:
判断3个条件:1、onTouchListener不为空
2、enable为true
3、onTouch返回true
如果3个条件都满足则返回true,事件由disPatchTouchEvent消费(实际由onTouch消费),如果不满足,则执行自己的onTouchEvent。

onTouchEvent:如果控件可点击,则返回true(代表事件被接收)然后判断是否有onClickListener,有则执行;如果不可点击,则直接返回false(代表事件不能接收,后续事件也不再接收)。

ViewGroup:
disPatchTouchEvent:
判断2个条件:1、disallowIntercept(默认false,通过requestDisallowINterceptTouchEvent设置更改)
2、!onInterceptToucheEvent
两个条件满足一个,则for循环遍历viewGroup下的子view是否是正在点击的view,如果是则调用该view的dispatchTouchEvent。如果该view的dispathcTouchEvent返回true,则vieGroup的dispatchTouchEvent也返回true,导致ViewGroup的touch事件无法执行;如果循环没有找到匹配的view,则执行super.dispatchTouchEvent,即View类的dispatchTouchEvent。

onInterceptTouchEvent:返回false,配合上面表示不打断,进入遍历循环;
onTouchEvent:同View。

cancel事件:down事件接收后,后续事件被父布局拦截(如超出范围),则会下发cancel事件。

0 0
原创粉丝点击