禁用子 viewPager 在父 viewPager 内滑动

Disable child viewPager swipe inside parent viewPager

我想禁用滑动父 viewpager 中的子 viewpager。

我目前使用这个自定义子 viewpager

public class CustomViewPager extends ViewPager {

public CustomViewPager(Context context) {
    super(context);
}

public CustomViewPager(Context context, AttributeSet attrs) {
    super(context, attrs);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    // Never allow swiping to switch between pages
    return true;
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    // Never allow swiping to switch between pages
    return true;
}

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {

    return true;
}
}

这会禁用子 viewpager 的滑动,但父 viewpager 的滑动会在该部分被禁用。

您应该在子 ViewPager 的 onInterceptTouchEventonTouchEvent 中 return false。从 onTouchEvent 返回 True 将告诉父视图已成功处理事件,这不是您想要的。

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    // Never allow swiping to switch between pages
    return false;
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    // Never allow swiping to switch between pages
    return false;
}

要在不影响父事件的情况下禁用 ViewPager 滚动,请覆盖 canScrollHorizo​​ntally() 方法:

@Override
    public boolean canScrollHorizontally(int direction) {
        //Disable horizontal scrolling
        if (enabled) {
            return super.canScrollHorizontally(direction);
        } else {
            return false;
        }
    }