当前位置: 移动技术网 > IT编程>移动开发>Android > Android中RecyclerView嵌套滑动冲突解决的代码片段

Android中RecyclerView嵌套滑动冲突解决的代码片段

2019年07月24日  | 移动技术网IT编程  | 我要评论

教师节电子贺卡模板,暴疯语下载,快乐大本营20090829

在纵向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);
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网