可控制滑动方向的viewPager

viewpager应该可以说是我们项目中必备的一个组件了吧(希望不要打脸~),但有时候原生的组件并不能满足我们具体的业务需求,比如前段时间我就遇到一个场景,在viewpager滑动到特定页面的时候,可以控制它不能继续右滑了.等条件满足的时候,才可以继续滑动,这个时候,就需要我们自己对viewpager进行小小的修改,来满足我们的贪欲(产品狗的需求~)。

下面给大家一个可以控制滑动方向的viewpager,走你~

public class LimitSlideDirectionViewPager  extends ViewPager {


    private float initialXValue;
    private SwipeDirection direction;

    public LimitSlideDirectionViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.direction = SwipeDirection.ALL;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (this.IsSwipeAllowed(event)) {
            return super.onTouchEvent(event);
        }

        return false;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        if (this.IsSwipeAllowed(event)) {
            return super.onInterceptTouchEvent(event);
        }

        return false;
    }

    private boolean IsSwipeAllowed(MotionEvent event) {
        if(this.direction == SwipeDirection.ALL) return true;

        if(direction == SwipeDirection.NONE )//disable any swipe
            return false;

        if(event.getAction()==MotionEvent.ACTION_DOWN) {
            initialXValue = event.getX();
            return true;
        }

        if(event.getAction()==MotionEvent.ACTION_MOVE) {
            try {
                float diffX = event.getX() - initialXValue;
                if (diffX > 0 && direction == SwipeDirection.RIGHT ) {
                    // swipe from left to right detected
                    return false;
                }else if (diffX < 0 && direction == SwipeDirection.LEFT ) {
                    // swipe from right to left detected
                    return false;
                }
            } catch (Exception exception) {
                exception.printStackTrace();
            }
        }

        return true;
    }

    public void setAllowedSwipeDirection(SwipeDirection direction) {
        this.direction = direction;
    }




}
public enum  SwipeDirection {


    ALL, LEFT, RIGHT, NONE ;


}

  首先定义一个枚举类 SwipeDirection,定义可运行的滑动方向

  ALL:允许左右滑动

  LEFT:允许左滑

  RIGHT:允许右滑

  NONE:不允许左右滑动

 

 重写viewpager的onTouchEvent 和 onInterceptTouchEvent方法,通过IsSwipeAllowed方法来判断是否拦截事件或者消费事件~

 

在需要控制的地方调用 setAllowedSwipeDirection方法就ok了

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值