###解决使用SwipeRefreshLayout
下拉刷新和左右滑动事件冲突的问题
【处理上下冲突,左右冲突】
项目中某个功能从原生修改到加载h5,在h5中有左右滑动的广告图(下图中的A区域),该页还需要保留下拉刷新,使用的是SwipeRefreshLayout
, 开发完成后发现手动滑动广告图时会出现卡顿,停滞现象,究其原因,是左右滑动和下拉刷新(垂直)冲突导致,就是SwipeRefreshLayout
对于Y轴的处理容差值很小,如果不是水平滑动,很轻易就会触发下拉刷新。
为了解决该问题,需要重写SwipeRefreshLayout
的onInterceptTouchEvent(MotionEvent ev)
事件,在这里面进行处理,当X距离滑动大于某个值时,就认为是左右滑动,不执行下拉刷新操作。
import 包名
import android.content.Context;
import android.support.v4.widget.SwipeRefreshLayout;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
/**
* Created by on 2016/6/13.
*/
public class VerticalSwipeRefreshLayout extends SwipeRefreshLayout {
private int scaleTouchSlop;
private float preX;
public VerticalSwipeRefreshLayout(Context context, AttributeSet attrs) {
super(context, attrs);
scaleTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
preX = ev.getX();
break;
case MotionEvent.ACTION_MOVE:
float moveX = ev.getX();
float instanceX = Math.abs(moveX - preX);
Log.i("refresh...","move: instanceX:" + instanceX + "=(moveX:" + moveX + " - preX:" + preX + ") , scaleTouchSlop:" + scaleTouchSlop);
// 容差值大概是24,再加上60
if(instanceX > scaleTouchSlop + 60){
return false;
}
break;
}
return super.onInterceptTouchEvent(ev);
}
}
在layout中使用
解决,完毕。
【扫描二维码查看】