您的位置:首页 > 其它

slidingmenu和ViewPager滑动冲突的解决方法

2014-09-29 17:05 113 查看
slidingmenu嵌套ViewPager

下面说的是slidingmenu左侧是菜单和中间部分是ViewPager时 滑动事件冲突的问题:

当滑动事件冲突时,我们首先要想到用事件的分发和拦截处理机制来解决,首先在slidingmenu控件的CustomViewAbove这个类(这里只举例左侧栏,右侧栏同理),找到onInterceptTouchEvent,在里面加入这段代码,这里的isCanMove默认是true,false时代表 不能滑动菜单,

@Override

public boolean onInterceptTouchEvent(MotionEvent ev) {

if (!AppContext.isCanMove) {

return false;

}

然后 重写ViewPager ,重写下里面的dispatchTouchEvent这个方法,由此可见,当我们按下ViewPager时,当当前页不是第一页时,isCanMove为false,此时slidingmenu控件的CustomViewAbove的onInterceptTouchEvent方法就会执行,将slidingmenu滑动事件拦截掉 而只执行ViewPager滑动事件;若非第一页则应该不屏蔽,这里必须判断ViewPager是否是第一页,如果是第一页在向左滑动应该是侧边栏,如果不是第一页,则应该屏蔽侧边栏而向左滑动ViewPager.(逻辑需求应该是这样才合理),如果是右侧菜单就要判断当前页是否是最后一页

@Override

public boolean dispatchTouchEvent(MotionEvent ev) {

if (ev.getAction() == MotionEvent.ACTION_DOWN) {

if (getCurrentItem() == 0) {

AppContext.isCanMove = true;

}else{

AppContext.isCanMove = false;

}

}

return super.dispatchTouchEvent(ev);

}

综上所述:之所以在dispatchTouchEvent里写而不在onTouchEvent里写 是因为dispatchTouchEvent会在onInterceptTouchEvent之前执行,dispatchTouchEvent是事件的分发,然后才到拦截onInterceptTouchEvent,最后才到onTouchEvent,处理好这个事件 以后所有的控件 凡是有冲突都可以参考这个原理来解决了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: