我所看到的 这里 方法 dispatchTouchEvent 没有可能设置拖动区域以避免ViewPager触摸拦截。因此,您可以分叉此repo并添加该功能。或者你可以覆盖活动 dispatchTouchEvent :
dispatchTouchEvent
boolean menuDragging = false; public boolean isInsideMenuDragArea(MotionEvent ev) { return ev.getX() < 200; // THIS IS PIXELS, NOT DP! } @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (menuDragged) return resideMenu.dispatchTouchEvent(ev); if (ev.getAction() == MotionEvent.ACTION_DOWN) { if (!isInsideMenuDragArea(ev)) { return super.dispatchTouchEvent(ev); } else { menuDragging = true; } } else if (ev.getAction() == MotionEvent.ACTION_UP) { menuDragging = false; } return resideMenu.dispatchTouchEvent(ev); }
我认为这足以理解我的意思
的 编辑: 强>
如果要在向左滑动第一个选项卡时打开侧面导航抽屉
viewPager.setOnPageChangeListener(new OnPageChangeListener() { public void onPageScrollStateChanged(int state) {} public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {} public void onPageSelected(int position) { if (position == 0) resideMenu.removeIgnoredView(viewPager); else resideMenu.addIgnoredView(viewPager); } });
的 EDIT2: 强> 将此添加到您的活动中
boolean resideMenuEnabled = true; public void setResideMenuEnabled(boolean enabled) { if (resideMenuEnabled != enabled) { if (enabled) resideMenu.removeIgnoredView(viewPager); else resideMenu.addIgnoredView(viewPager); resideMenuEnabled = enabled; } }
并像这样使用它
viewPager.setOnPageChangeListener(new OnPageChangeListener() { public void onPageScrollStateChanged(int state) {} public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {} public void onPageSelected(int position) { if (position == 0) setResideMenuEnabled(true); else setResideMenuEnabled(false); } });