Activity,ViewGroup,View
1.默认情况
Activity->dispatchTouchEvent
MyLinearLayout->dispatchTouchEvent
MyLinearLayout->onInterceptTouchEvent
customview->dispatchTouchEvent
customview->onTouchEvent
MyLinearLayout->onTouchEvent
Activity->onTouchEvent
Activity->dispatchTouchEvent
Activity->onTouchEvent
为什么dispatchTouchEvent会调用两次?
因为有ACTION_DOWN(按下)和ACTION_UP(抬起)两个操作。
2.ViewGroup调用onInterceptTouchEvent拦截,返回true
Activity->dispatchTouchEvent
MyLinearLayout->dispatchTouchEvent
MyLinearLayout->onInterceptTouchEvent
MyLinearLayout->onTouchEvent
Activity->onTouchEvent
Activity->dispatchTouchEvent
Activity->onTouchEvent
3.ViewGroup调用onInterceptTouchEvent拦截,返回true,并消费onTouchEvent,返回true
Activity->dispatchTouchEvent
MyLinearLayout->dispatchTouchEvent
MyLinearLayout->onInterceptTouchEvent
MyLinearLayout->onTouchEvent
Activity->dispatchTouchEvent
MyLinearLayout->dispatchTouchEvent
MyLinearLayout->onTouchEvent
4.在View消费onTouchEvent,返回true
Activity->dispatchTouchEvent
MyLinearLayout->dispatchTouchEvent
MyLinearLayout->onInterceptTouchEvent
customview->dispatchTouchEvent
customview->onTouchEvent
Activity->dispatchTouchEvent
MyLinearLayout->dispatchTouchEvent
MyLinearLayout->onInterceptTouchEvent
customview->dispatchTouchEvent
总结:
a.屏幕按下,先调用activity的dispatchEvent,然后调用viewgroup的dispatchEvent,最后调用view的dispatchEvent
b.dispatchEvent在内部会调用onTouchEvent
c.先调用onTouch,再调用onClick。onTouch默认返回false,如果返回true的话,onTouchEvent不会调用
d.在activity中dispatchTouchEvent如果不调用父类的方法,例如返回false或者true,会拦截所有事件。
f.onTouchEvent中父类会调用onClick
g.onLongClick的返回值,返回fasle,会继续传递最后调用onClick,返回true,最后不会调用onClick
触摸事件分发机制详解
本文详细解析了Android中触摸事件的分发机制,包括Activity、ViewGroup和View的dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent方法的调用流程。阐述了事件拦截与消费的逻辑,以及不同返回值对事件传递的影响。
1034

被折叠的 条评论
为什么被折叠?



