/**
* Created by shengqf
* Email : shengqf@bsoft.com.cn
* date : 2020/2/20
* describe : 解决SwipeRefreshLayout拦截ViewPager的滑动冲突
*/
public class ViewPagerSwipeRefreshLayout extends SwipeRefreshLayout {
private float mStartX = 0;
private float mStartY = 0;
//ViewPager是否被拖动
private boolean mIsVpDrag;
//判断滑动的最小距离
private int mTouchSlop;
public ViewPagerSwipeRefreshLayout(@NonNull Context context) {
super(context, null);
}
public ViewPagerSwipeRefreshLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
int action = ev.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
mStartX = ev.getX();
mStartY = ev.getY();
mIsVpDrag = false;
break;
case MotionEvent.ACTION_MOVE:
//如果ViewPager正在被拖拽,则不拦截ViewPager事件
if (mIsVpDrag) {
return false;
}
float endX = ev.getX();
float endY = ev.getY();
float distanceX = Math.abs(endX - mStartX);
float distanceY = Math.abs(endY - mStartY);
//如果X方向的位移大于Y方向的位移,则不拦截ViewPager的事件
if (distanceX > mTouchSlop && distanceX > distanceY) {
mIsVpDrag = true;
return false;
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
mIsVpDrag = false;
break;
}
return super.onInterceptTouchEvent(ev);
}
}
解决SwipeRefreshLayout拦截ViewPager的滑动冲突
最新推荐文章于 2020-10-22 19:53:13 发布