當使用SwipeRefreshLayout的時候,如果內部嵌套了ViewPager等類似橫向滑動的View,會產(chǎn)生滑動沖突,需要重寫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);
}