ViewPager禁用左右滑动

来源:互联网 发布:暗影格斗2mac破解 编辑:程序博客网 时间:2024/05/28 15:53

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);    }

如有错误或更好的建议,欢迎提出!

0 0