gpt4 book ai didi

android - 如何在 ViewPager2 中禁用特定方向的滑动

转载 作者:行者123 更新时间:2023-12-02 13:05:36 29 4
gpt4 key购买 nike

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

我试过扩展 ViewPager2类并覆盖触摸事件,但不幸的是它ViewPager2是最后一课,所以我不能扩展它。

其次,我尝试使用 setUserInputEnabled方法为false,但这完全禁用了所有滑动(我只想禁用从右到左的滑动)。如果我能找到一些监听器在滑动之前检查当前页面并禁用滑动,否则它可能会起作用。

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

设置 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);

最佳答案

我找到了一个监听器,它可以在用户尝试滑动时监听,然后它会检查当前页面,如果是第一页,则禁用用户输入,否则默认启用它。
这是它的代码 fragment
在 Java 中:

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);
}
}
});
在 Kotlin :
viewPager.registerOnPageChangeCallback(object : OnPageChangeCallback() {
override fun onPageScrollStateChanged(state: Int) {
super.onPageScrollStateChanged(state)

viewPager.isUserInputEnabled = !(state == SCROLL_STATE_DRAGGING && viewPager.currentItem == 0)
}
})
因为我的场景只有 2 页,所以检查页码对我来说会很好,但是如果我们有超过 2 页并且我们需要禁用一个特定方向的滑动,我们可以使用 onPageScrolled(int position, float positionOffset, int positionOffsetPixels) viewpager2 的听众并根据 position 的正值或负值处理所需的场景和 positionOffset .

关于android - 如何在 ViewPager2 中禁用特定方向的滑动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56647971/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com