从布局上的任意位置右滑打开 NavigationView
Open NavigationView on Right Swipe from everywhere on the layout
我想通过右滑打开导航视图,无论右滑在哪里。默认情况下,您必须在侧面向右滑动,但我想从中间滑动以打开导航视图
您可以使用类似这样的方式增加抽屉的滑动边缘
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)
您需要 @override onTouchEvent(MotionEvent event)
并且可以检测到抽屉中的右滑 activity,然后打开其中的抽屉。
@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);
}
我想通过右滑打开导航视图,无论右滑在哪里。默认情况下,您必须在侧面向右滑动,但我想从中间滑动以打开导航视图
您可以使用类似这样的方式增加抽屉的滑动边缘
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)
您需要 @override onTouchEvent(MotionEvent event)
并且可以检测到抽屉中的右滑 activity,然后打开其中的抽屉。
@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);
}