SwipeRefreshLayout和ViewPager一起使用的时候,事件处理上会有冲突,比如当你想要左右滑动的时候,但是因为角度稍微斜了一些,极有可能导致ViewPager没有滑动起来,却触发了SwipeRefreshLayout的刷新动画。解决这个问题的思路就是继承SwipeRefreshLayout,在OnInterceptTouchEvent函数中拦截处理 , 增加触发下拉刷新的高度 . miniTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop()*8 , 根据自己的需要增加相应的高度 . 我这里是扩大了8倍.
具体代码:
package ctrip.android.destination.view.story;
import android.content.Context;
import android.support.v4.widget.SwipeRefreshLayout;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
public class GSSwipeRefreshLayout extends SwipeRefreshLayout {
private float mInitialDownYValue = 0;
private int miniTouchSlop;
public GSSwipeRefreshLayout (Context context) {
super(context);
}
public GSSwipeRefreshLayout (Context context, AttributeSet attrs){
super(context,attrs);
miniTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop()*8;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (!isEnabled()){
return false;
}
final int action = ev.getActionMasked();
switch (action) {
case MotionEvent.ACTION_DOWN:
mInitialDownYValue = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
float yDiff = ev.getY() - mInitialDownYValue;
if (yDiff < miniTouchSlop ){
return false;
}
break;
default:
break;
}
return super.onInterceptTouchEvent(ev);
}
}