今天给大家分享一个自定义的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能给大家带来帮助。