在纵向RecyclerVIEw嵌套横向RecyclerVIEw时,如果纵向RecyclerVIEw有下拉刷新功能,那么内部的横向RecyclerVIEw的横向滑动体验会很差.(只有纯横向滑动时,才能滑动内部的横向RecyclerVIEw,否则滑动事件就会影响到下拉刷新),添加拦截判断.
public class MySwipeRefreshLayout extends SwipeRefreshLayout { private boolean mIsVpDragger; private final int mtouchSlop; private float startY; private float startX; public MySwipeRefreshLayout(Context context) { super(context); mtouchSlop = VIEwConfiguration.get(context).getScaledtouchSlop(); } public MySwipeRefreshLayout(Context context,AttributeSet attrs) { super(context,attrs); mtouchSlop = VIEwConfiguration.get(context).getScaledtouchSlop(); } @OverrIDe public boolean onIntercepttouchEvent(MotionEvent ev) { int action = ev.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: // 记录手指按下的位置 startY = ev.getY(); startX = ev.getX(); // 初始化标记 mIsVpDragger = false; break; case MotionEvent.ACTION_MOVE: // 如果vIEwpager正在拖拽中,那么不拦截它的事件,直接return false; if (mIsVpDragger) { return false; } // 获取当前手指位置 float endY = ev.getY(); float endX = ev.getX(); float distanceX = Math.abs(endX - startX); float distanceY = Math.abs(endY - startY); // 如果X轴位移大于Y轴位移,那么将事件交给vIEwPager处理。 if (distanceX > mtouchSlop && distanceX > distanceY) { mIsVpDragger = true; return false; } break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: // 初始化标记 mIsVpDragger = false; break; } // 如果是Y轴位移大于X轴,事件交给swipeRefreshLayout处理。 return super.onIntercepttouchEvent(ev); }}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
总结以上是内存溢出为你收集整理的Android中RecyclerView嵌套滑动冲突解决的代码片段全部内容,希望文章能够帮你解决Android中RecyclerView嵌套滑动冲突解决的代码片段所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)