onInterceptTouchEvent()是ViewGroup的一个方法,目的是在系统向该ViewGroup及其各个childView触发onTouchEvent()之前对相关事件进行一次拦截,Android这么设计的想法也很好理解,由于ViewGroup会包含若干childView,因此需要能够统一监控各种touch事件的机会,因此纯粹的不能包含子view的控件是没有这个方法的,如LinearLayout就有,TextView就没有。
onInterceptTouchEvent()用于处理事件并改变事件的传递方向。处理事件这个不用说了,你在函数内部编写代码处理就可以了。而决定传递方向的是返回值,返回为false时事件会传递给子控件的onInterceptTouchEvent();返回值为true时事件会传递给当前控件的onTouchEvent(),而不在传递给子控件,这就是所谓的Intercept(截断)。
onTouchEvent同样也是在view中定义的一个方法。处理传递到view 的手势事件。手势事件类型包括ACTION_DOWN,ACTION_MOVE,ACTION_UP,ACTION_CANCEL等事件。若onTouchEvent返回true,则表示view消费了这次事件,之后的ACTION_MOVE,ACTION_UP,ACTION_CANCEL事件view都会捕获。如果onTouchEvent返回false,view除了捕获了ACTION_DOWN事件之后就不会再捕获其他的事件,其他的事件则返回view的父一级view并由其父一级view进行处理。如果是根view的onTouchEvent方法,不管其返回false还是true,都会处理ACTION_DOWN之后的其他事件。