android - 在 Android 的 ViewPager2 中检测越界滑动

标签 android androidx android-viewpager2

我正在使用 ViewPager2并希望检测用户何时在第一页向左滑动或在最后一页向右滑动。

我知道这可以使用旧的 ViewPager 来实现,就像讨论过的 here , 但这种方法不可行,因为 ViewPager2 是最终的并且不能被子类化。

ViewPager2 提供 OnPageChangeCallback但这也不能使用,因为在越界时没有页面事件。

我错过了什么吗?

最佳答案

我在输入这个问题时想出了一个(有点老套的)解决方案。

这是基于观察到状态SCROLL_STATE_SETTLING只有当viewpager真正定居在一个新页面上时才会达到。如果在第一页或最后一页上只有无结果的拖动,则只有状态 SCROLL_STATE_DRAGGING 和最后的 SCROLL_STATE_IDLE 被传递。

viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {

        private boolean settled = false;

        @Override
        public void onPageScrollStateChanged(int state) {
            super.onPageScrollStateChanged(state);
            if (state == SCROLL_STATE_DRAGGING) {
                settled = false;
            }
            if (state == SCROLL_STATE_SETTLING) {
                settled = true;
            }
            if (state == SCROLL_STATE_IDLE && !settled) {
                doYourOutOfBoundsStuff();
            }
        }
    });

我不是很开心,但这是我迄今为止遇到的最好的。

关于android - 在 Android 的 ViewPager2 中检测越界滑动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64224874/

相关文章:

java - 为什么Androidx.appcompat.AppCompatActivity抛出java.lang.NoSuchMethodError : No virtual method getMainExecutor()?

java - 如何获取 API 客户端? (谷歌播放服务)

android - 使用事件单击创建自定义控件

android - 以一个主题而非另一个主题的自定义样式覆盖 Android 背景

android - 带有 LENGTH_LONG 的 Snackbar 的实际持续时间是多少

android - 如何修复多个文件被发现与操作系统无关的路径 'build-data.properties'

java - 启用后新的 PreferenceScreen 无法打开

android - 使 viewpager2 响应选项卡单击事件

java - 如何将 url 中的图像加载到 viewpager2 中?