解决两侧SldingMenu+ViewPager手势冲突问题

来源:互联网 发布:cfd模拟软件 编辑:程序博客网 时间:2024/04/29 06:21

这里SlidingMenu用的是github 的开源项目jfeinstein10/SlidingMenu ,单侧的SldingMenu配合ViewPager在demo中有解决方案。

这里通过修改一点源码解决问题。

首先找到CustomAboveView.java里的determineDrag方法,

在某个if条件里添加一个方法determineDragValid,如图


方法相关内容如下:


private boolean isLeftEnable=true;
    private boolean isRightEnable=true;

    public void setLeftEnable(boolean isLeftEnable) {
        this.isLeftEnable = isLeftEnable;
    }

    public void setRightEnable(boolean isRightEnable) {
        this.isRightEnable = isRightEnable;
    }
    private boolean determineDragValid(float dx)
    {
      return  1!=mCurItem||((dx >=0&&isLeftEnable)||(dx<=0&&isRightEnable));
    }


除了determineDragVaild ,还添加了两个set方法,这两个方法分别用来控制 启用/禁用 左/右 侧抽屉。

然后在找到SlidingMenu.java ,添加两个转发方法


public void setLeftEnable(boolean b) {
        mViewAbove.setLeftEnable(b);
    }

    public void setRightEnable(boolean b) {
        mViewAbove.setRightEnable(b);
    }


然后就可以用上面添加的方法解决冲突问题了

在ViewPager的OnPageChangeListener里面onPageSelect方法里面判断,注意在此之前要setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN)

 @Override
            public void onPageSelected(int position) {
                if (0==position)
                {
                    slidingMenu.setLeftEnable(true);
                    slidingMenu.setRightEnable(false);
                }else if (lastPosition==position)
                {
                    slidingMenu.setLeftEnable(false);
                    slidingMenu.setRightEnable(true);
                }else{
                    slidingMenu.setLeftEnable(false);
                    slidingMenu.setRightEnable(false);
                }
            }


如果是仿网易新闻布局,那么在点击抽屉菜单里的某项切换到不同栏目时,依旧会发生SlidingMenu冲突问题,这个解决方案是在每次切换Fragment时,重新设置SldingMenu 左右侧菜单状态。


如果还有其他更好的解决方法,欢迎指教。




0 0
原创粉丝点击