TouchEvent事件的处理:在View树中,找到一个可以处理这个Touch事件的View,然后不断
把TouchEvent事件传递给这个View
1.查找的过程发生在ACTION_DOWN时
从View树的根View开始从上向下,传递TouchEvent事件,这个过程是在查看是否有
ViewGroup拦截,如果有,TouchEvent事件不会再向下传递;
如果没有, TouchEvent事件会传递到最底层的View/ViewGroup
再从底向上,传递TouchEvent事件,这过程是在查看是否有View/ViewGroup可以处理
TouchEvent事件,如果有,记录这个View/ViewGroup,和从根View到达这个View
/ViewGroup的路径,且不会再向上传递这个TouchEvent
如果没有,则View树不会再处理后续的TouchEvent事件
2.查找到后, 会根据记录下来的路径,把后续的TouchEvent事件不断通过记录的路径传递
给View,这个过程依然可以拦截这个TouchEvent,但这个拦截不会妨碍后面的TouchEvent
接着按照记录的路径传递给View
View.dispatchTouchEvent()负责调用onTouchEvent(),onTouchEvent()的返回值决定了View是否处理
这个事件,true代表处理,false代表不处理
ViewGroup继承了View,重写了dispatchTouchEvent(),dispatchTouchEvent()负责向ViewGroup的子View
传递TouchEvent,也负责调用自身的onTouchEvent,判断它本身出否处理该TouchEvent;
也就是它负责向下传递TouchEvent事件
ViewGroup的onInterceptTouchEvent负责拦截TouchEvent,true代表拦截
把TouchEvent事件传递给这个View
1.查找的过程发生在ACTION_DOWN时
从View树的根View开始从上向下,传递TouchEvent事件,这个过程是在查看是否有
ViewGroup拦截,如果有,TouchEvent事件不会再向下传递;
如果没有, TouchEvent事件会传递到最底层的View/ViewGroup
再从底向上,传递TouchEvent事件,这过程是在查看是否有View/ViewGroup可以处理
TouchEvent事件,如果有,记录这个View/ViewGroup,和从根View到达这个View
/ViewGroup的路径,且不会再向上传递这个TouchEvent
如果没有,则View树不会再处理后续的TouchEvent事件
2.查找到后, 会根据记录下来的路径,把后续的TouchEvent事件不断通过记录的路径传递
给View,这个过程依然可以拦截这个TouchEvent,但这个拦截不会妨碍后面的TouchEvent
接着按照记录的路径传递给View
View.dispatchTouchEvent()负责调用onTouchEvent(),onTouchEvent()的返回值决定了View是否处理
这个事件,true代表处理,false代表不处理
ViewGroup继承了View,重写了dispatchTouchEvent(),dispatchTouchEvent()负责向ViewGroup的子View
传递TouchEvent,也负责调用自身的onTouchEvent,判断它本身出否处理该TouchEvent;
也就是它负责向下传递TouchEvent事件
ViewGroup的onInterceptTouchEvent负责拦截TouchEvent,true代表拦截