代码简单,容易理解,里面有点注释,够看了,特别少的改动。
package com.laka.live.ui.widget;
import android.content.Context;
import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.MotionEvent;
/**
* Created by Lyf on 2017/8/3.
* 解决ScrollView与RecyclerView横向滚动时的事件冲突
*/
public class ScrollRecyclerView extends RecyclerView {
public ScrollRecyclerView(Context context) {
super(context);
}
public ScrollRecyclerView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public ScrollRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
private float lastX, lastY;
@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
boolean intercept = super.onInterceptTouchEvent(e);
switch (e.getAction()) {
case MotionEvent.ACTION_DOWN:
lastX = e.getX();
lastY = e.getY();
break;
case MotionEvent.ACTION_MOVE:
// 只要横向大于竖向,就拦截掉事件。
// 部分机型点击事件(slopx==slopy==0),会触发MOVE事件。
// 所以要加判断(slopX > 0 || sloy > 0)
float slopX = Math.abs(e.getX() - lastX);
float slopY = Math.abs(e.getY() - lastY);
// Log.log("slopX=" + slopX + ", slopY=" + slopY);
if((slopX > 0 || slopY > 0) && slopX > slopY){
requestDisallowInterceptTouchEvent(true);
intercept = true;
}
break;
case MotionEvent.ACTION_UP:
intercept = false;
break;
}
// Log.log("intercept"+e.getAction()+"=" + intercept);
return intercept;
}
}
————————————————
版权声明:本文为CSDN博主「岳锋」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/l_o_s/article/details/76647845