ViewGroup在接收到touch事件时,通过dispatchTouchEvent(MotionEvent event)把事件分发到子view里. touch事件的起始动作是ACTION_DOWN, viewgroup会调用onInterceptTouchEvent(MotionEvent ev)方法,若返回false才会正式分发事件到子view中,子view也调用dispatchTouchEvent方法,若返回true证明它消费了这个事件, viewgroup会把mMotionTarget设为该子view。
在后续事件分发中(通常为ACTION_MOVE), 若mMotionTarget为null, 则viewgroup会消费这个事件, 否则viewgroup会调用onInterceptTouchEvent方法,若返回true时表示viewgroup要消费这个事件, 它会把mMotionTarget设为null然后返回true. 若返回false表示继续由子view来消费该事件。
总的来说,就是若 onInterceptTouchEvent方法返回true或者 ACTION_DOWN时没有子view消费该事件,则由viewgroup来消费该事件,否则将事件分发到子view中处理。
本文详细解析了Android中ViewGroup如何处理触摸事件,包括ACTION_DOWN时如何调用onInterceptTouchEvent方法决定是否拦截事件,以及ACTION_MOVE时如何处理mMotionTarget变量来决定事件的流向。
1045

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



