Sha*_*ain 5 android kotlin android-viewpager2
我想禁用从右向左滑动ViewPager2。我的导航抽屉里基本上有一个带有 2 页的 viewpager2 元素。我希望我的第二页仅在我单击第一页中的某个元素时显示(从第一页从右向左滑动不应打开第二页),而当我在第二页时,viewpager2 滑动(向左滑动)向右滑动)应该像在 viewpager 中那样滑动。
我尝试扩展ViewPager2类并覆盖触摸事件,但不幸的ViewPager2是它是最终类,因此我无法扩展它。
其次,我尝试使用setUserInputEnabledfalse 方法,但这完全禁用了所有滑动(我只想禁用从右向左滑动)。如果我能找到一些在滑动之前检查当前页面并禁用滑动的侦听器,它可能会起作用。
implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha05'
Run Code Online (Sandbox Code Playgroud)
设置 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);
Run Code Online (Sandbox Code Playgroud)
我找到了一个监听器,它可以在用户尝试滑动时进行监听,然后它会检查当前页面,如果它是第一页,则禁用用户输入,否则默认启用它。
这是代码片段
在 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);
}
}
});
Run Code Online (Sandbox Code Playgroud)
在科特林:
viewPager.registerOnPageChangeCallback(object : OnPageChangeCallback() {
override fun onPageScrollStateChanged(state: Int) {
super.onPageScrollStateChanged(state)
viewPager.isUserInputEnabled = !(state == SCROLL_STATE_DRAGGING && viewPager.currentItem == 0)
}
})
Run Code Online (Sandbox Code Playgroud)
由于我的场景只有 2 页,检查页码对我有好处,但如果我们有超过 2 页并且我们需要禁用在一个特定方向的滑动,我们可以使用onPageScrolled(int position, float positionOffset, int positionOffsetPixels)监听器viewpager2并处理所需的场景根据的正或负的值position和positionOffset。
| 归档时间: |
|
| 查看次数: |
4909 次 |
| 最近记录: |