前一阵子在项目中遇到一个很奇葩的需求,用户注册登录的页面是分成一张张卡片的,填完一张卡片的信息才能进入下一步。我首先想到的是ViewPager,ViewPager的每个页面用Fragment填充即可。但是之前使用的ViewPager的每一个页面的左右都是紧密相连的,两个页面之间没有间隙。好在终于找到了一个第三方库可以解决这个问题:
这是一个模仿魅族广告轮播的第三方库,两个页面之间可以设置间距,这正好解决了我的问题(关于这个库的用法大家可以上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
。
你问我为什么没有一整套的注册登录逻辑和效果,因为……加了一个晚上的班弄出滑动效果之后第二天早上就改需求了,改需求了!!!所以能分享的也就只有这些了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。