一、Android的事件分发、拦截和响应

来源:互联网 发布:手机淘宝2015旧版本5.5 编辑:程序博客网 时间:2024/06/05 12:40

 dispatchTouchEventonInterceptTouchEventonTouchEvent    activity  YNY viewgroup YYYviewYNY

注:此处的view指的的是:TextView,Button....等最终节点的view。


事件分发:public boolean dispatchTouchEvent(MotionEvent ev)

返回值(return):

true:表示事件终止向下分发,事件将会被当前view或者activity的dispatchTouchEvent消费。

false:表示事件终止向下分发,事件将会传递给上层的view或者activity的onTouchEvent消费,如

                           果当前为activity,则事件将会被系统消费。

super.dispatchTouchEvent(ev):将事件交给当前的事件拦截方法onInterceptTouchEvent进行处理,如果没有(view或者activity),

传递给子view或者viewgroup的dispatchTouchEvent继续进行分发处理。


事件拦截:public boolean onInterceptTouchEvent(MotionEvent ev) 

返回值(return)

true: 表示事件将被拦截,并将事件交由当前viewgroup(只有viewgroup有onInterceptTouchEvent方法)的onTouchEvent进行消费。

false:表示事件放行,继续向下分发给子view或者viewgroup的dispatchTouchEvent进行分发处理。

super.onInterceptTouchEvent(ev):表示事件将被拦截,并将事件交由当前viewgroup的onTouchEvent进行消费。


事件响应:public boolean onTouchEvent(MotionEvent ev)

返回值(return)

true:表示事件将被消费,并且此次事件终结。

false:表示事件将向上层viewgroup或者activity传递,并有上层的onTouchEvent进行接收,如果上层的onTouchEvent也返回false,

这次事件将会消失,并且接收不到下一次事件。

super.onTouchEvent(ev):和false相同

最终要想让onTouchEvent响应:

dispatchTouchEvent返回false,向上传递给上层的onTouchEvent消费,或者系统默认super.dispatchTouchEvent,交由onInterceptTouchEvent

处理,或者继续向下分发。

onInterceptTouchEvent返回true或者super.onInterceptTouchEvent,都是被当前的onTouchEvent消费,如果当前的onTouchEvent返回false

,此次事件不会终结,会依次向上传递,并有上层的onTouchEvent响应,如果上层的onTouchEvent返回false,事件将会消失,并且

接收不到下一次的事件;如果当前的onTouchEvent返回非系统默认值,则代表此次事件终结。


原创粉丝点击