在Android中,onInterceptTouchEvent和onTouchEvent都是用来处理Touch操作的函数。
其中onTouchEvent在View和ViewGroup类中都有,而onInterceptTouchEvent只在ViewGroup类中有。
在ViewGroup中onInterceptTouchEvent和onTouchEvent协作,使相应的ViewGroup(View)去处理相应的Touch事件。
ViewGroup可以嵌套多层ViewGroup,Touch事件最先被最外层的ViewGroup接收,向内一层层传递,最终传递到最内层的ViewGroup(View)。内层的ViewGroup(View)最先处理Touch事件,处理完之后向外一层层传递,每一层依次处理该Touch事件。
实际上,每一曾的ViewGroup都可以决定Touch事件是否要继续向内/向外传递。
通常情况下,如果使用系统自带的ViewGroup,Touch事件会从最外层传递到最内层,再从最内层处理到最外层。而我们自定义的ViewGroup则不必这样,我们可以通过自定义onInterceptTouchEvent和onTouchEvent的返回值,决定是否还要将Touch事件向内/向外传递,还是将当前的ViewGroup就当做最外层/最内层的来处理。
onInterceptTouchEvent的返回值用来决定Touch事件是否继续向内层传递(是否拦截这个Touch事件):
return true:拦截,Touch事件不再向内层传递
return false:不拦截,Touch事件继续向内层传递
onTouchEvent的返回值用来决定Touch事件是否继续向外层传递(是否已经消费(consume)掉这个事件):
return true:Touch事件已经被消费,不再向外层传递
return false:Touch事件还没有被完全消费,继续向外层传递