安卓滑动冲突(读《安卓开发艺术探索》笔记)

一、内部上下滑动外部左右滑动或者内部左右滑动外部上下滑动:采用的方法一般是判断滑动方向进行事件拦截

1、外部拦截法

         就是指点击事件都先经过父容器的拦截处理,如果父容器需要此事件就拦截,如果不需要此事件就不拦截。这种方法处理滑动冲突需要重写onInterceptTouchEvent。

需要注意的几个点:

1)首先是Action_Down事件不能拦截,即返回false,因为一旦拦截了ACTION_DOWN那么后续的ACTION_MOVE和ACTION_UP都会直接交由父容器处理,没法再传递给子元素了。

2)ACTION_MOVE,根据需要来拦截

3)ACTION_UP这里必须返回false,因为事件本身无太大意义。假设事件交由子元素处理,如果父容器在ACTION_UP返回了true,就会导致子元素无法接受到ACTION_UP事件。

2、内部拦截法

           内部拦截法是指父容器不拦截任何事件,所有事件都传递给子元素,如果子元素需要此事件就直接消耗掉,否则就交由父容器处理,这种方法和Android中的事件分发机制不一致,需要配合requestDisallowInterceptTouchEvent方法才能正常工作。

注意:此时父元素需要拦截ACTION_DOWN以外的其他事件,这样当子元素调。

用parent.requestDisallowInterceptTouchEvent方法时,父元素才能拦截所需的事件。

推荐采用外部拦截法(相对内部拦截法简单易用)


你可能感兴趣的:(安卓滑动冲突(读《安卓开发艺术探索》笔记))