viewpager嵌套一个子viewpager处理滑动冲突方法

来源:互联网 发布:linux系统怎么操作 编辑:程序博客网 时间:2024/06/05 10:17
  • 场景如:TabHost滑动切换页面时有一个页面里面有个广告轮播图,这时或出现子控件没有滑动事件。
  • 遇到这种情况,一般重写子viewpager中onTouchEvent(),这个方法主要用于事件的处理,当返回true表示消费处理当前事件,当返回false则不处理,交给子控件进行继续分发。
public class ChildViewPager extends ViewPager{    /** 触摸时按下的点 **/    private PointF downP = new PointF();    /** 触摸时当前的点 **/    private PointF curP = new PointF();    public ChildViewPager(Context context, AttributeSet attrs) {        super(context, attrs);        // TODO Auto-generated constructor stub    }    public ChildViewPager(Context context) {        super(context);        // TODO Auto-generated constructor stub    }    @Override   public boolean onTouchEvent(MotionEvent ev) {        switch (ev.getAction()) {        case MotionEvent.ACTION_DOWN:            ......            //记录按下时候的坐标            //切记不可用 downP = curP ,这样在改变curP的时候,downP也会改变            downP.x = ev.getX();            downP.y = ev.getY();            //此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰            getParent().requestDisallowInterceptTouchEvent(true);            break;        case MotionEvent.ACTION_MOVE:            ......            //此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰            getParent().requestDisallowInterceptTouchEvent(true);            break;        case MotionEvent.ACTION_UP:                ......            //在up时判断是否按下和松手的坐标为一个点            //如果是一个点,将执行点击事件,这是我自己写的点击事件,而不是onclick            getParent().requestDisallowInterceptTouchEvent(false);            if(downP.x==curP.x && downP.y==curP.y){                return true;            }            break;    }
0 0
原创粉丝点击