luckybilly / SmartSwipe

An android library to make swipe more easier and more powerful. Android各种侧滑,有这一个就够了

Home Page:https://juejin.im/post/5d3fdc3af265da03c02bdbde

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

在fragment中使用抽屉效果出现的问题

mayangyang-github opened this issue · comments

问题描述

使用版本 1.1.2
请描述您遇到的问题

我先说我页面的布局结构:
MainActivity中 从上到下, 分别是一个NoScrollViewPager包装5个Fragment,
底部是BottomNavigationView作为切换Fragment的功能按钮.

我的需求:
[只]在第一个fragment中, 从左往右侧滑, 需要拉出来一个抽屉布局, 这个布局要全屏 (遮挡MainActivity的一切, 包括Mainactivity下方的BottomNavigationView), 其他的fragment中侧滑不能拉出此布局.

我的做法:
我在第一个Fragment 的 onCreateView中,

View drawerView = LayoutInflater.from(view.getContext()).inflate(R.layout.nav_header_main, container, false);     
        final DrawerConsumer drawerConsumer = new DrawerConsumer();
        drawerConsumer.setLeftDrawerView(drawerView);

        final SwipeConsumer swipeConsumer = SmartSwipe.wrap(getActivity())
                .addConsumer(drawerConsumer)    //抽屉效果
                //可以设置横向(左右两侧)的抽屉为同一个view ,也可以为不同方向分别设置不同的view
                .setHorizontalDrawerView(drawerView)
                .setScrimColor(0x2F000000)      //设置遮罩的颜色
                .setShadowColor(0xFFDDDDDC)     //设置边缘的阴影颜色
                //.setSensitivity(0.1f);        //灵敏度,数值越大越灵敏
                .setEdgeSize(0);                //在控件边缘处一定范围内才能触发, 若为0,表示在整个控件区域都可触发

这样做是没问题的, 在第一个Fragment中, 侧滑确实能拉出来drawerView, 在其他Fragment中不能拉出此布局.

但是需求说, 在第一个Fragment中拉出布局的手势范围有点太大了, 我就:

 .setEdgeSize(100);                //在控件边缘处一定范围内才能触发, 若为0,表示在整个控件区域都可触发

这样做, 在第一个Fragment中左侧边缘才能拉出drawerView, 但是问题出现了:
我点击BottomNavigationView切换到其他Fragment, 在其他Fragment中左边侧滑, 也能拉出来这个drawerView...

我的问题:
我不想在其他Fragment中侧滑拉出来这个drawerView, 求教解决办法...

@mayangyang-github 你试试继承DrawerConsumer,复写tryAcceptMoving方法

@mayangyang-github 你试试继承DrawerConsumer,复写tryAcceptMoving方法

感谢大佬提供的解决思路, 我在 重写了 tryAcceptMoving 方法中判断了当前BottomNavigationView 的Index, 如果是第0个 就返回super, 否则就返回false :

if (currentIndex == 0) {
     return super.tryAcceptMoving(pointerId, downX, downY, dx, dy);
} else {
     return false;
}

这样就解决了问题