如何禁用ViewPager2中特定方向的刷卡 [英] How to disable swiping in specific direction in ViewPager2

查看:142
本文介绍了如何禁用ViewPager2中特定方向的刷卡的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想禁用在ViewPager2中从右向左滑动. 我基本上在导航抽屉中有一个包含2页的viewpager2元素.我希望仅在单击第一页中的某些元素时显示第二页(从第一页从右向左滑动不应该打开第二页),而当我在第二页中时,则在viewpager2滑动(左向右滑动),就应该像在viewpager中滑动一样.

I want to disable right to left swipe in ViewPager2. I basically have a viewpager2 element with 2 pages in my navigation drawer. I want my second page to show up only when I click some element in my first page (right to left swipe from the first page should not open the second page), while when I'm in the second page, the viewpager2 swipe (left to right swipe) should swipe as it should do in viewpager.

我尝试扩展ViewPager2类并覆盖触摸事件,但是不幸的是,它ViewPager2是最终类,因此我无法扩展它.

I've tried extending the ViewPager2 class and override the touch events, but unfortunately it ViewPager2 is a final class, so I cannot extend it.

其次,我尝试使用setUserInputEnabled方法设置为false,但这完全禁用了所有滑动(我只想禁用从右向左滑动).如果我可以找到一些监听器,该监听器可以在滑动前检查当前页面,并在其他情况下禁止滑动,则可能可以.

Secondly, I tried to use setUserInputEnabled method to false, but this disabled all swipes altogether (I just want to disable right to left swipe). If I could find some listener which checks for the current page before swiping and disable swipe otherwise, it would probably work.

     implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha05'

用于设置ViewPager2的代码

Code for setting up of ViewPager2

      ViewPager2 pager = view.findViewById(R.id.pager);
      ArrayList<Fragment> abc = new ArrayList<>();
      abc.add(first);
      abc.add(second);
      navigationDrawerPager.setAdapter(new DrawerPagerAdapter(
                this, drawerFragmentList));
      pager.setAdapter(new FragmentStateAdapter(this), abc);

推荐答案

我找到了一个监听器,当用户尝试滑动时可以监听,它将检查当前页面,如果它是第一页,则禁用用户输入否则将其默认启用.

I found a listener which can listen when the user tries to swipe, it'll then check the current page, if it's the first page, disable the user input else enable it as it was by default.

这是该代码段:-

        pager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageScrollStateChanged(int state) {
                super.onPageScrollStateChanged(state);
                if (state == SCROLL_STATE_DRAGGING && pager.getCurrentItem() == 0) {
                    pager.setUserInputEnabled(false);
                } else {
                    pager.setUserInputEnabled(true);
                }
            }
        });

由于我的场景只有2页,所以检查页码对我来说是件好事,但是如果我们有2页以上并且需要在一个特定方向上禁用滑动,则可以使用onPageScrolled(int position, float positionOffset, int positionOffsetPixels)侦听器viewpager2的值,并根据positionpositionOffset的正值或负值处理所需的情况.

Since my scenario was of 2 pages only, checking the page number would be good for me, but in case we have more than 2 pages and we need to disable the swipe in one particular direction, we may use onPageScrolled(int position, float positionOffset, int positionOffsetPixels) listener of viewpager2 and handle the desired scenario according to the positive or negative values of position and positionOffset.

这篇关于如何禁用ViewPager2中特定方向的刷卡的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆