美文网首页工作生活
Android 事件分发

Android 事件分发

作者: RookieRun | 来源:发表于2019-07-01 16:25 被阅读0次

1.ViewGroup:onTouchEvent与onTouch事件与onClick事件的关系

流程:dispatchTouchEvent—》onInterceptTouchEvent—》onTouchListenter(onTouch)—》onTouchEvent—》onClick
1.若onTouchListener:onTouch返回 true:
则dispatch(down)—》onIntercept--》onTouch(down)—》dispatch(up)—》onTouch(up)

image.png

2.若onTouchListener:onTouch返回 false:
则dispatch(down)—》onIntercept(down)—》onTouch(down)--》onTouchEvent(down)—》dispatch(up)—》onTouch(up)—》onTouchEvent(up)—》onClick();


image.png

综上:整个事件分发的入口为dispatchTouchEvent,整个过程,有onInterceptTouchEvent(ViewGroup),onTouchListener,onTouchEvent,onClickListener参与,而onTouchListener的返回值为true时,onTouchEvent以及onClick不会被调用,onTouchListener返回false时,onTouchEvent以及onClick会被调用(前提是onTouchEvent返回值为false,clickable以及设置了onClickListener)

2.onTouchEvent消费规则:

2.1若down事件返回了false,则后续的move,up事件均不会在分发至此View(ViewGroup),因为该View(ViewGroup)不消费该事件(down返回了false)


false.png

2.2.若down返回了true


true
2.3.down返回了super
super

2.4若layout中包含子view,而layout的onTouchEvent返回了true,子 view还能响应touch事件吗?(答案是可以的,没搞懂,layout不是已经消费了吗?)

3.onInterceptTouchEvent拦截规则:

1.若layout的onInterceptTouchEvent()返回了true,则该layout的onTouchEvent只能继续接收到down事件,后续的move,up事件接受不到(没搞懂)
2.若layout的onInterceptTouchEvent返回了false,则该layout及其子view的事件分发均按正常逻辑分发

相关文章

网友评论

    本文标题:Android 事件分发

    本文链接:https://www.haomeiwen.com/subject/frfncctx.html