当使用SwipeRefreshLayout的时候,如果内部嵌套了ViewPager等类似横向滑动的View,会产生滑动冲突,需要重写SwipeRefreshLayout.
private int mTouchSlop;
private float mPrevX;
public CustomSwipeToRefresh(Context context, AttributeSet attrs) {
super(context, attrs);
//判断用户在进行滑动操作的最小距离
mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mPrevX = MotionEvent.obtain(event).getX();
break;
case MotionEvent.ACTION_MOVE:
final float eventX = event.getX();
//获取水平移动距离
float xDiff = Math.abs(eventX - mPrevX);
//当水平移动距离大于滑动操作的最小距离的时候就认为进行了横向滑动
//不进行事件拦截,并将这个事件交给子View处理
if (xDiff > mTouchSlop) {
return false;
}
}
return super.onInterceptTouchEvent(event);
}