美文网首页
RecyclerView 嵌套 ViewPager 上下滑动问题

RecyclerView 嵌套 ViewPager 上下滑动问题

作者: 雪_枫 | 来源:发表于2017-08-09 19:10 被阅读0次

    先看下效果

    GIF.gif

    效果上可以看到 有下拉刷新Banner还需要可以滑动

    网上找了一圈都没有相关的,要么就是改RecyclerView的要么就是改ViewPager然后验证了之后都不管用。
    后来还是根据网上ListView嵌套ViewPager部分代码修改完成实现想要的效果。

    提一下,在实现的时候 public boolean dispatchTouchEvent(MotionEvent ev) 这个方法里添加的事件分发并不管用,而网上很多都是在这个方法里进行实现的。

    项目中用到的是LoopRecyclerViewPager这个类,然后自己重写的,所以也有可能是继承的类不一样所以方法不生效的问题

    
    PointF downP = new PointF();
    PointF curP = new PointF();
    
     private float xDown;// 记录手指按下时的横坐标。
        private float xMove;// 记录手指移动时的横坐标。
        private float yDown;// 记录手指按下时的纵坐标。
    
        @Override
        public boolean onTouchEvent(MotionEvent ev) {
            // 每次进行onTouch事件都记录当前的按下的坐标
            curP.x = ev.getX();
            curP.y = ev.getY();
    
            if (ev.getAction() == MotionEvent.ACTION_DOWN) {
                // 这两个参数记录的暂时不知道做什么用,也没有地方进行引用。
                downP.x = ev.getX();
                downP.y = ev.getY();
    
                xDown = ev.getX();
                yDown = ev.getY();
    
                // 此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰
                getParent().requestDisallowInterceptTouchEvent(true);
            }
    
            // 重点方法在这里了,移动的时候进行判断
            if (ev.getAction() == MotionEvent.ACTION_MOVE) {
    
                xMove = ev.getX();
                float yMove = ev.getY();
               // 这里判断是横向还是纵向移动,
                if (Math.abs(yMove - yDown) < Math.abs(xMove - xDown) && Math.abs(xMove - xDown) > 2) {
                    // 这里还要再进行一次判断,不然横向滑动的时候直接没效果了
                    if (Math.abs(xMove - xDown) > 2) {
                        // 通知父控件不要进行拦截了,事件自己消费
                        getParent().requestDisallowInterceptTouchEvent(true);
                    } else {
                        // 这里返回False 事件自己消费了,不用往下传递。
                        return false;
                    }
                } else {
                    // 通知父控件进行事件拦截
                    getParent().requestDisallowInterceptTouchEvent(false);
                }
            }
            return super.onTouchEvent(ev);
        }
    
    

    上面的算是记录下项目中踩到的坑吧,以后可能还会遇到同样的问题。有些地方描述的可能也有错,请指证。

    相关文章

      网友评论

          本文标题:RecyclerView 嵌套 ViewPager 上下滑动问题

          本文链接:https://www.haomeiwen.com/subject/qbvqrxtx.html