onInterceptTouchEvent(MotionEvent ev)
使用这个方法去拦截所有触屏事件。这就允许你在事件被分发到子View的时候去监控事件,并且可以在任何时刻都可以处理手势动作。
使用这个方法有几点需要注意的地方,由于这个函数与onTouchEvent(MotionEvent ev)与相当紧密且复杂的联系,因此作用这两个方法时一定要注意函数返回值之间的关联,屏幕会按如下的顺序接收事件:
- Down事件会先传递到此函数
- Down事件要么被这个ViewGroup的子View处理,要么被本ViewGroup本身处理,并调用它的onTouchEvent方法处理Down事件;这就意味着你应该实现onTouchEvent()方法并且返回true。因此你会继续收到当前事件序列的其他事件,而不用寻找它的父View去处理事件。
- 因此,通过onTouchEvent()函数返回true,onInterceptTouchEvent()函数不会收到同一事件序列中后续的事件,并且所有的事件都必须在onTouchEvent()函数中进行处理,onTouchEvent()的返回值根据业务决定。
- 只要onInterceptTouchEvent()函数返回false,同一事件序列中的后续事件依然会走到此函数,并根据业务需要传递给目标View的onTouchEvent(),注意并不一定是此View的onTouchEvent()
- 如果onInterceptTouchEvent()函数返回true,在同一事件序列的后续事件将不会传递到此函数,除了ACTION_CANCEL,目标View会收到同样的事件,因为随后的事件序列不会传递到此函数,它会传递到onTouchEvent()函数。