Android之单方向滑动的Viewpager

前一阵子在项目中遇到一个很奇葩的需求,用户注册登录的页面是分成一张张卡片的,填完一张卡片的信息才能进入下一步。我首先想到的是ViewPager,ViewPager的每个页面用Fragment填充即可。但是之前使用的ViewPager的每一个页面的左右都是紧密相连的,两个页面之间没有间隙。好在终于找到了一个第三方库可以解决这个问题:

仿魅族BannerView

这是一个模仿魅族广告轮播的第三方库,两个页面之间可以设置间距,这正好解决了我的问题(关于这个库的用法大家可以上GitHub看作者的说明,这里就不赘述了)。但是别忘了ViewPager是可以滑动的,而用户在注册时的步骤可是有先后之分的,比如输入手机号码获取验证码通过之后,才能设置密码,此时就不能任由用户滑动页面,不然步骤就乱了套了。但是完全禁止ViewPager的滑动也不现实,因为用户想向右滑返回到上一页总不能不让他这么做吧?(别问我为什么不用返回按钮,设计如此……)。所以我们需要一个可以单方向滑动的ViewPager。好在这个也不算难实现,我们可以监听触摸事件来做到。用户在界面上左右滑动时,我们可以监听起始坐标值和手指滑动过程中的坐标值,如果滑动后的坐标值比起始坐标值大,那么此时就是向右滑动,可以响应;反之则不必响应:

        float beforeX;
        mzBannerView.getViewPager().setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        //获取起始坐标值
                        beforeX = event.getX();
                        break;
                    case MotionEvent.ACTION_MOVE:
                        if(event.getX() - beforeX < 0){ //禁止左滑
                            return true;
                        }
                        //重新对起始坐标赋值
                        beforeX = event.getX();
                        break;
                }
                return false;
            }
        });

以上的代码是禁止左滑的,如果要禁止右滑,只需改成event.getX() - beforeX > 0

你问我为什么没有一整套的注册登录逻辑和效果,因为……加了一个晚上的班弄出滑动效果之后第二天早上就改需求了,改需求了!!!所以能分享的也就只有这些了。

相关文章:Android之禁止ViewPager滑动

阅读 1.6k

推荐阅读