全网唯一有用的解决方案!彻底解决VerticalViewPager嵌套RecyclerView引起的滑动冲突!

首先承认标题的确很装13,但是这样做是为了引起大家注意,真正去解决大家的问题。因为这个问题无论我百度或者Google,都没有找到可行的解决方案。

本人用的VerticalViewPager是GitHub上的castorflex/VerticalViewPager。

我在用VerticalViewPager里嵌套了两个fragment,frg1和frg2,其中frg1有RecyclerView,frg2有水平滑动的ViewPager,水平滑动的ViewPager里包含了RecyclerView。

frg1                                              frg2

好了废话不多说,直接说明问题,当我从frg1上翻滑动到下面的frg2的时候,是OK的。但是当我从frg2下拉滑动到上面的frg1的时候,滑动事件被拦截,无法滑动,我进行了无数尝试,一直企图从RecyclerView入手,可是没有任何效果,也可能是本人水平不行,大神勿喷。

最后,我通过修改VerticalViewPager的事件拦截,实现了这个效果,下面就是我在castorflex/VerticalViewPager的代码基础上,在onInterceptTouchEvent方法里添加的代码,如果各位有更好的方法,请留言分享给我,向大家学习,谢谢!

    /**
     * 如果是上下滑动事件,拦截下来,自己处理
     * 解决嵌套RecyclerView问题
     */
    private float x = 0;//初始化按下时坐标变量
    private float y = 0;//初始化按下时坐标变量

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {

        /**
         * 如果是上下滑动事件,拦截下来,自己处理
         * 解决嵌套RecyclerView问题
         */
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                //记录按下时的坐标
                x = ev.getX();
                y = ev.getY();
                break;
            case MotionEvent.ACTION_MOVE:
                float dX = Math.abs(x - ev.getX());
                float dY = Math.abs(y - ev.getY());

                //根据屏幕大小,调整能引发VerticalViewpager拦截竖直滑动的最小高度
                int screenHeight = ScreenUtils.getScreenHeight(context);
                //因为我的HonyWell的PDA屏幕高是800,拦截竖直滑动的最小高度设置为200比较合适,所以以此适配
                int scrollHeight = screenHeight * 200 / 800;//引发VerticalViewpager拦截竖直滑动的最小高度
                //满足竖直滑动,并且滑动高度大于“引发VerticalViewpager拦截竖直滑动的最小高度”时,拦截此滑动事件,不再交给下面的RecyclerView处理
                if (dY > scrollHeight && dY > dX) {
                    Log.e("MyVerticalViewPager", "MyVerticalViewPager");
                    return true;
                }
                break;
        }

   }

下面附上源码链接https://download.csdn.net/download/wan778899/10604759,我想免费分享,但是最少设置1分。。。MMMM,觉得帮到您了,麻烦给个赞!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值