58 lines
2.0 KiB
Java
58 lines
2.0 KiB
Java
package androidx.swiperefreshlayout.widget;
|
||
|
||
import android.content.Context;
|
||
import android.util.AttributeSet;
|
||
import android.view.MotionEvent;
|
||
import android.view.ViewConfiguration;
|
||
|
||
public class ViewPagerSwipeRefreshLayout extends SwipeRefreshLayout {
|
||
|
||
private float startY;
|
||
private float startX;
|
||
// 记录viewPager是否拖拽的标记
|
||
private boolean mIsVpDragger;
|
||
private final int mTouchSlop;
|
||
|
||
public ViewPagerSwipeRefreshLayout(Context context, 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:
|
||
// 记录手指按下的位置
|
||
startY = ev.getY();
|
||
startX = ev.getX();
|
||
// 初始化标记
|
||
mIsVpDragger = false;
|
||
break;
|
||
case MotionEvent.ACTION_MOVE:
|
||
// 如果viewpager正在拖拽中,那么不拦截它的事件,直接return false;
|
||
if(mIsVpDragger) {
|
||
return false;
|
||
}
|
||
|
||
// 获取当前手指位置
|
||
float endY = ev.getY();
|
||
float endX = ev.getX();
|
||
float distanceX = Math.abs(endX - startX);
|
||
float distanceY = Math.abs(endY - startY);
|
||
// 如果X轴位移大于Y轴位移,那么将事件交给viewPager处理。
|
||
if(distanceX > mTouchSlop && distanceX > distanceY) {
|
||
mIsVpDragger = true;
|
||
return false;
|
||
}
|
||
break;
|
||
case MotionEvent.ACTION_UP:
|
||
case MotionEvent.ACTION_CANCEL:
|
||
// 初始化标记
|
||
mIsVpDragger = false;
|
||
break;
|
||
}
|
||
// 如果是Y轴位移大于X轴,事件交给swipeRefreshLayout处理。
|
||
return super.onInterceptTouchEvent(ev);
|
||
}
|
||
} |