Android:如何在 ViewPager2 中拦截触摸事件

ccp*_*zza 10 android ontouchlistener swipe-gesture android-viewpager2

当触摸事件来自嵌套视图(例如 Horizo​​ntalScrollView 等)时,如何防止在androidx ViewPager2 中滑动?

我希望通过覆盖可以实现这一点,ViewPager2.onInterceptTouchEvent()但是由于 ViewPager2final不能被子类化。

现有的解决方案(见下表)处理与旧ViewPager可以被继承。

正如我尝试过的其中一个答案中所建议的那样:

    private ViewPager2 viewPager2;

    ...
    HorizontalScrollView nestedScrollView = pagerView.findViewById(R.id.scrollview);

    nestedScrollView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            viewPager2.requestDisallowInterceptTouchEvent(true);
            return false;
        }
    });

// nestedScrollView - the HorizontalScrollView inside a ViewPager2 item
// viewPager2 - the ViewPager2 instance
Run Code Online (Sandbox Code Playgroud)

但这似乎没有任何效果。

ViewPager2 具有从 ViewGroup 继承的onInterceptTouchEvent()但我没有看到在最终类上覆盖它的方法。

重新实现整个 ViewPager2 似乎不是一个明智的解决方案——原始类有 1607 行长,而且它使用的类不是由包导出的。

我看过的其他类似问题: