Android活动冲突解决
活动冲突,主要是MotionEvent事件中的ACTION_MOVE事件,原因;View与父View无法明确,事件由那个View进行处理。
找到问题,我们下面开始展示解决方案【结合事件分发机制,如果想要了解事件分发机制内容,请查看作者文章】:
1、外部拦截法:事件都先经过父容器的拦截处理,如果父容器需要此事件就拦截,如果不需要此事件就不拦截,这样就可以解决滑动冲突的问题。
public boolean onInterceptTouchEvent(MotionEvent event){ boolean = intercepted = false; switch(event.getAction()){ case MotionEvent.ACTION_DOWN: intercepted = false; break; case MotionEvent.ACTION_MOVE: //如果父容器需要当前事件,就进行拦截。 if(need){ intercepted = true; }else{ intercepted = false; } break; case MotionEvent.ACTION_UP: intercepted = false; break; default: break; } return intercepted; }
2、内部拦截法:父容器不拦截任何事件,所有的事件都传递给子元素,如果子元素需要此事件就直接消耗掉,否则就交由父容器进行处理。
public boolean dispatchTouchEvent(MotionEvent event){ switch(event.getAction()){ case MotionEvent.ACTION_DOWN: //父容器不拦截此事件。 parent.requestDisallowIntercepTouchEvent(true); break; case MotionEvent.ACTION_MOVE: //如果父容器需要当前事件,就进行拦截。 if(need){ parent.requestDisallowInterceptTouchEvent(false); } break; case MotionEvent.ACTION_UP: break; default: break; } return super.dispatchTouchEvent(event); }
解决滑动冲突的问题,核心技术,不外乎事件机制的处理。
Android活动冲突解决
最新推荐文章于 2022-05-05 18:02:41 发布