1、首先,在Application文件中添加一个boolean类型的变量,用于存储用户的手势姿态,判断用户现在的手势是否触摸到了轮播图,如果触摸的是轮播图,则不去拦截事件。
/** * 手指是否在轮播图上 */ public static boolean rollViewPagerTouching;
在oncreate方法中初始化:
rollViewPagerTouching = false;
默认为false,就是没有触摸到轮播图
2、然后我们要在自己的轮播图控件中对手势进行判断
/** * 事件分发 */ @Override public boolean dispatchTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_DOWN: BaseApplication.rollViewPagerTouching = true; break; case MotionEvent.ACTION_UP: BaseApplication.rollViewPagerTouching = false; break; } return super.dispatchTouchEvent(ev); }
3、在侧滑控件中的
onInterceptTouchEvent方法做处理
// 让 ViewDragHelper 决定是否拦截事件 @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if(BaseApplication.rollViewPagerTouching){ return false; } return mDragHelper.shouldInterceptTouchEvent(ev); }
搞定。
然后对于(
在侧滑菜单在打开时,由于轮播图的自定滚动导致侧滑菜单自动关闭
)这个问题的解决办法是
判断侧滑菜单的开关状态,然后在菜单打开的时候,让轮播图停止滚动。菜单关闭的时候,就让轮播图开始滚动。具体的代码就不给了,自己试着解决一下吧。