首先承认标题的确很装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.youkuaiyun.com/download/wan778899/10604759,我想免费分享,但是最少设置1分。。。MMMM,觉得帮到您了,麻烦给个赞!