MenuDrawer提供了closeMenu()
这个函数,可以直接调用该函数,关闭侧滑菜单:view.closeMenu();
由于我生成的侧滑菜单里面嵌套了ViewPager,所以我需要在ViewPager处于第一个页面并且往左滑动(此时手往右滑动)的时候,调用这个方法。
关于ViewPager的滑动事件监听,在这儿不做详细的解释。我们在onPageScrollStateChanged(int status)
的status等于1(ViewPager正在滑动)的时候,在onPageScrolled(int position, float percent, int px)
里执行以下代码:
if(isScrolling == true){
if(lastValue > px){
right = true;
left = false;
}else if(lastValue < px){
right = false;
left = true;
}else if(lastValue == px && px == 0){
right = left = false;
}
}
lastValue = px;
其中的px是指页面滑动的时候,移动的像素值,如果像素值为递增,则页面往右边滑动,反正,如果像素值为递减,则页面往左边滑动。当页面处于第一个页面,并且往左滑动的时候,由于是第一个页面,所以此时ViewPager是无法滑动的,即right = left = false
。那么,我们将标识位赋为true:
if(position == 0 && right == false && left == false){
close = true;
System.out.println("clsoe is true");
}else {
close = false;
System.out.println("clsoe is false");
}
其中的position标识的是当前ViewPager所处的页面,0表示第一个页面。
如果在满足条件position == 0 && right == false && left == false
的时候立即执行关闭菜单的操作,并且此时手指并未离开屏幕,那么关闭菜单的操作仍旧会触发ViewPager的滑动事件,而且此时如果继续滑动手指,ViewPager的滑动事件会一直存在。当再次打开的侧滑菜单的时候,由此带来的影响很可能会将菜单的Viewpager变为第二个页面。而且如果一旦满足条件就关闭菜单,有可能会因为产生误操作而关闭菜单,影响用户体验。所以我们需要在所有的滑动操作已经完成,即onPageScrollStateChanged(int status)
的status等于0的时候,再执行关闭菜单的操作。
关闭侧滑菜单的操作为:
if(status == 0 && close == true){
close = false;
// System.out.println("close is false");
view.closeMenu();
MainActivity main = (MainActivity) context;
main.menu_open = 0;
}