右侧打开NavigationView从布局上的任何位置滑动

时间:2016-01-19 13:15:04

标签: android navigationview

我想在右侧滑动时打开导航视图,无论右侧滑动在哪里。默认你必须在侧面做正确的滑动,但我想从中间滑动以打开导航视图

2 个答案:

答案 0 :(得分:2)

你可以使用类似的东西来增加抽屉的滑动边缘

public static void increaseSwipeEdgeOfDrawer(DrawerLayout mDlSearchDrawer) {
        try {

            Field mDragger = mDlSearchDrawer.getClass().getDeclaredField(
                    "mRightDragger");//mRightDragger or mLeftDragger based on Drawer Gravity
            mDragger.setAccessible(true);
            ViewDragHelper draggerObj = (ViewDragHelper) mDragger
                    .get(mDlSearchDrawer);

            Field mEdgeSize = draggerObj.getClass().getDeclaredField(
                    "mEdgeSize");
            mEdgeSize.setAccessible(true);
            int edge = mEdgeSize.getInt(draggerObj);


            mEdgeSize.setInt(draggerObj, <size of the edge here>);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

或者您可以在顶部保留一个与抽屉布局大小相匹配的视图,在强硬的侦听器上指定它以检测滑动并在其上调用DrawerLayout#openDrawer(android.view.View)

答案 1 :(得分:0)

您需要@override onTouchEvent(MotionEvent event)并且可以检测抽屉活动中的右侧滑动,然后打开抽屉。

@Override
public boolean onTouchEvent(MotionEvent event)
{     
    switch(event.getAction())
    {
      case MotionEvent.ACTION_DOWN:
          x1 = event.getX();                         
      break;         
      case MotionEvent.ACTION_UP:
          x2 = event.getX();
          float deltaX = x2 - x1;

          if (Math.abs(deltaX) > MIN_DISTANCE)
          {
              // Left to Right swipe action
              if (x2 > x1)
              {
                  Toast.makeText(this, "Left to Right swipe [Next]", Toast.LENGTH_SHORT).show ();   
                  drawer.openDrawer();     //OPEN YOUR DRAWER HERE              
              }

          }
          else
          {
              // consider as something else - a screen tap for example
          }                          
      break;   
    }           
    return super.onTouchEvent(event);       
}