您的位置:首页 > 其它

ViewPager禁用左右滑动

2015-08-17 18:05 288 查看
ViewPager 禁用左右滑动的方法:

继承ViewPager在dispatchTouchEvent方法中处理。主要代码如下:

private float x=0,x1=0;
private boolean a = false;
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if(isDisable){//标志是否禁用左右滑动
//这里注意了多点触控时一定要这样的的
switch(ev.getAction() & MotionEvent.ACTION_MASK){
case MotionEvent.ACTION_DOWN:
x = ev.getX();
break;
case MotionEvent.ACTION_POINTER_DOWN:
x1 = ev.getX(ev.getPointerCount()-1);
a = true;
break;
case MotionEvent.ACTION_POINTER_UP:
a = false;
break;
case MotionEvent.ACTION_UP:
a = false;
x = x1;
break;
case MotionEvent.ACTION_MOVE:
//在水平方向上不可滑动
if(a){
float xx = ev.getX(ev.getPointerCount()- 1);
ev.offsetLocation(x1 -xx,0);
}else{
ev.setLocation(x, ev.getY());
}
break;
}
}
return super.dispatchTouchEvent(ev);
}


完整类的下载地址:http://download.csdn.net/detail/yukun314/9016307

在该类中实现了设置禁用左右滑动,关于viewPager复杂切换问题的解决,自定义切换动画(使用setCurrentItem时,由于默认的时间很短 没有效果)。用法都比较简单就不上代码了。

发现这样多点触控时仍然有可以左右滑动的情况,修改为(下载资源中没有修改)

float x=0;
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if(isDisable){
switch(ev.getAction()){
case MotionEvent.ACTION_DOWN:
x = ev.getX();
break;
case MotionEvent.ACTION_MOVE:
//在水平方向上不可滑动
ev.setLocation(x, ev.getY());
break;
}

switch(ev.getAction() & MotionEvent.ACTION_MASK){
case MotionEvent.ACTION_POINTER_DOWN:
case MotionEvent.ACTION_POINTER_UP:
return true;
}
}
return super.dispatchTouchEvent(ev);
}


如有错误或更好的建议,欢迎提出!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: