Android Touch事件分发与消费机制

来源:互联网 发布:樱井知香痉挛场景 编辑:程序博客网 时间:2024/05/16 13:58

1.事件分发:dispatchTouchEvent(MotionEvent ev)

由父View向子View传递事件。

return true,事件会分发给当前View,并由dispatchTouchEvent()进行消费,同时事件停止传递。

return false,将事件返回给Activity或者父View的onTouchEvent()进行消费。

super.dispatchTouchEvent(),事件会分发给当前View的onInterceptTouchEvent()方法。

2.事件拦截:onInterceptTouchEvent(MotionEvent ev)

事件由当前View的dispatchTouchEvent()进行分发。

return true,拦截事件,并交由当前View的onTouchEvent处理。

return false,不拦截事件,当前View的事件会被传递到下层子View上,再由子View的dispatchTouchEvent()来进行事件分发。

super.onInterceptTouchEvent(),同return false。


3.事件响应:onTouchEvent(MotionEvent ev)

1)当前View dispatchTouchEvent()返回super.dispatchTouchEvent(),并且onInterceptTouchEvent()返回true时,当前View的onTouchEvent()会被掉用
2)事件一直被放行到最上层View,则会调用当前View的onTouchEvent()事件
return false,事件会从当前View向上传递,并且由父View的onTouchEvent()来接收
return true,消费该事件
super.onTouchEvent() 默认处理事件的逻辑与return false相同

注意:View没有onInterceptTouchEvent()方法,因为事件已经分发到最后,不需要拦截了。

文中所述父View皆指ViewGroup

0 0