android viewpager

来源:互联网 发布:淘宝买家信用度查询 编辑:程序博客网 时间:2024/05/16 20:31


viewpager 是一个好用,又华丽丽的控件。


1. 禁止viewpager 左右滑动,但不影响viewpager 每个paer上的事件


public class MainView extends ViewPager{private boolean isScrollable;    public MainView(Context context) {        super(context);    }    public MainView(Context context, AttributeSet attrs) {        super(context, attrs);    }    @Override    public boolean onTouchEvent(MotionEvent ev) {        if (isScrollable == false) {            return false;        } else {            return super.onTouchEvent(ev);        }    }    @Override    public boolean onInterceptTouchEvent(MotionEvent ev) {        if (isScrollable == false) {            return false;        } else {            return super.onInterceptTouchEvent(ev);        }    }    public boolean isScrollable() {        return isScrollable;    }    public void setScrollable(boolean isScrollable) {        this.isScrollable = isScrollable;    }}


2.在别的控件嵌套了viewpager后,可能会拦截viewpager的滑动事件(这个在仿网易的1个样式中有用到)。

public class MyViewPager extends ViewPager {int mLastMotionY;int mLastMotionX;public MyViewPager(Context context) {super(context);}public MyViewPager(Context context, AttributeSet attrs) {super(context, attrs);}@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {getParent().requestDisallowInterceptTouchEvent(true); //只需这句话,让父类不拦截触摸事件就可以了。        return super.dispatchTouchEvent(ev);}}


3.viewpager 嵌套viewpager 或者 是需要动态改变 viewpager 是否需要被父view拦截事件的时候(这个就需要进行判断然后动态的返回 true 或 false)

这个是被嵌套的 viewpager的代码,

public class TopViewPager extends ViewPager{//后在onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent里面告诉父View,也就是ViewPager不要拦截该控件上的触摸事件。//    public TopViewPager(Context context, AttributeSet attrs) {        super(context, attrs);        // TODO Auto-generated constructor stub    }    public TopViewPager(Context context) {        super(context);        // TODO Auto-generated constructor stub    }    float curX = 0f;    float downX = 0f;        @Override    public boolean onTouchEvent(MotionEvent arg0) {        // TODO Auto-generated method stub    //    switch (arg0.getAction()) {//case value:////break;////default://break;//}            curX = arg0.getX();                if(arg0.getAction() == MotionEvent.ACTION_DOWN){            downX = curX;        }        int curIndex = getCurrentItem();                if(curIndex == 0){        System.out.println("00");            if(downX < curX){                getParent().requestDisallowInterceptTouchEvent(false);                            }else{             //downX >= curX   (=)原来放在上面发现会有手势 滑动不成功的时候,放下来后解决了。                getParent().requestDisallowInterceptTouchEvent(true);            }                    }else if(curIndex == getAdapter().getCount()-1){            if(downX >= curX){                getParent().requestDisallowInterceptTouchEvent(true);            }else{                getParent().requestDisallowInterceptTouchEvent(true);            }                    }else{            getParent().requestDisallowInterceptTouchEvent(true);        }                return super.onTouchEvent(arg0);    }}






3 0