ViewPager如何禁止滑动和禁止切换动画

在实际开发中禁止ViewPager的滑动很长见,最简单直接的办法就是继承ViewPager,复写onInterceptTouchEvent()和onTouchEvent()方法,让这两个方法都return false就可以了,不进行事件拦截,不进行事件消费

在ViewPager中切换时候,禁止切换动画的做法是setCurrentItem(item,false)第二个参数传入false就可以了,目前也只有这一种方法去直接禁止切换动画

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        return false;//直接返回false不进行事件拦截
    }


    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        return false;//直接返回false不进行事件消费
    }


    /**
     *调用父类两个参数的方法,传入false,禁止切换动画
     * @param item
     */
    @Override
    public void setCurrentItem(int item) {
        super.setCurrentItem(item, false);//传入false禁止切换动画
    }

上面的代码已经实现的禁止滑动切换和禁止切换动画,在项目中,毕竟是自己写的代码,按照上面的写,比较简单粗暴,我们可以引入属性,可以在xml中设置是否可以滑动切换,提供设置的方法,设计这种可控开关比较好,通用性比较强,对自己的代码负责,具体代码贴在下边

在attrs.xml中添加属性

    
        
    

完整代码如下:

/**
 * 可以设置是否禁止滑动的ViewPager
 * 在xml中使用的属性
 * @attr R.styleable#EasyViewPager_isCanScroll 在xml中使用的属性
 */
public class EasyViewPager extends ViewPager {

    //默认可以滑动
    private static final boolean DEFAULT_IS_CAN_SCROLL = true;

    private boolean mIsCanScroll;

    public EasyViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.GiveViewPager);
        mIsCanScroll = typedArray.getBoolean(R.styleable.EasyViewPager_isCanScroll, DEFAULT_IS_CAN_SCROLL);
        typedArray.recycle();
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        //禁止的话返回false
        if (!mIsCanScroll) {
            return false;
        }
        return super.onInterceptTouchEvent(ev);
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        //禁止的话返回false
        if (!mIsCanScroll) {
            return false;
        }
        return super.onTouchEvent(ev);
    }

    /**
     * @param isCanScroll 是否可以滑动切花,true可以,false禁止
     */
    public void setCanScroll(boolean isCanScroll) {
        this.mIsCanScroll = isCanScroll;
    }

    /**
     * 重新setCurrentItem一个参数的函数,调用两个参数的函数
     * @param item
     */
    @Override
    public void setCurrentItem(int item) {
        super.setCurrentItem(item, mIsCanScroll);//传入false禁止切换动画
    }
}

可以在xml中使用该isCanScroll属性

    记得导入
    xmlns:app="http://schemas.android.com/apk/res-auto"

    
        
  //或着在代码中使用setCanScroll()使用

一个简单的功能,但是开发中很实用,也没有什么难度,即使这种简单的功能,没有什么难度的,我们也要认真的去对待,而不是随便写写,要写代码就要写出优质的代码,对自己的代码负责。

之前写了个RecyclerView的通用Adapter,和鸿洋大神github开源的那个是不一样的思路实现,代码更简单,使用更灵活,一个Adapter同时支持单布局和多布局,已经在项目中实际使用很长时间,确实很好用。走过路过不要错过哦,过两天分享给大家,大家可以关注我的,也可以关注我的微信公众号,相互学习,一起成长,一个在魔都奋斗的超级技术宅邀请您一起学习Android。

ViewPager如何禁止滑动和禁止切换动画_第1张图片
我的微信公众号.jpg

你可能感兴趣的:(ViewPager如何禁止滑动和禁止切换动画)