ViewPager禁止页面左右滑动

今天给大家分享一个自定义的ViewPager,主要实现禁止和允许ViewPager的左右滑动事件。

刚刚开始写的时候,因为ViewPager都是允许左右滑动的,所以就只考虑了禁止滑动,后来在使用中,基本都直接使用了我的自定义ViewPager,所以考虑到拓展性,就直接改为允许切换和禁止滑动。

先上代码。再讲解一下。

public class NoScrollViewPager extends ViewPager {

    private boolean isCanScroll = false;

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

    public NoScrollViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        return isCanScroll && super.onInterceptTouchEvent(ev);
    }
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        return isCanScroll && super.onTouchEvent(ev);
    }
    public void setCanScroll(boolean canScroll) {
        isCanScroll = canScroll;
    }
}

这边直接重写了onInterceptTouchEvent和onTouchEvent方法。这里不详细讲解这两个方法,百度上已经有很多更清晰的解释了。这里就稍微讲解一下方法的作用。我们都知道事件是从外到里传递进去,然后再一层层判断是否消费,不消费则传递出来。

因此,就有了onInterceptTouchEvent,这个方法主要用于事件的分发。如果我们在onInterceptTouchEvent设置了return true。事件则会被拦截到这里,不会继续传递下去。所以,如果我们需要消费,比如左右滑动切换的事件,就在onInterceptTouchEvent设置为ture,表示我们需要拦截这个事件,此时,我们就会把事件直接传递给onTouchEvent方法。

顾名思义,onTouchEvent,触摸事件的处理。当我们通过onInterceptTouchEvent拦截下了触摸事件以后,通过super.onTouchEvent(ev),则会处理对应的事件。如果需要处理对应的触摸事件,则根据event.getAction(),判断具体的事件类型,也可以进行相对应的处理。

最后,希望我的这个自定义ViewPager能给大家带来帮助。

你可能感兴趣的:(ViewPager禁止页面左右滑动)