横向滑动的ViewGroup中做如下操作
private boolean mScrolling;
private float touchDownX;
private float touchDownY;
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
touchDownX = event.getX();
touchDownY = event.getY();
mScrolling = false;
break;
case MotionEvent.ACTION_MOVE:
int slop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
if (Math.abs(touchDownX - event.getX()) >= slop || Math.abs(touchDownY - event.getY()) >= slop) {
mScrolling = true;
} else {
mScrolling = false;
}
break;
case MotionEvent.ACTION_UP:
mScrolling = false;
break;
}
return mScrolling;
}
private float x2 = 0;
private float y2 = 0;
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
return true;
case MotionEvent.ACTION_UP:
x2 = event.getX();
y2 = event.getY();
float slop = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics());
// swipe left
if (touchDownX - x2 > slop) {
// TODO 左滑操作
}
// swipe right
if (touchDownX - x2 < -slop) {
// TODO 右滑操作
}
break;
}
return super.onTouchEvent(event);
}
或者
private boolean mScrolling;
private float touchDownX;
private float touchDownY;
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
touchDownX = event.getX();
touchDownY = event.getY();
mScrolling = false;
break;
case MotionEvent.ACTION_MOVE:
int slop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
if (Math.abs(touchDownX - event.getX()) >= slop || Math.abs(touchDownY - event.getY()) >= slop) {
mScrolling = true;
} else {
mScrolling = false;
}
break;
case MotionEvent.ACTION_UP:
mScrolling = false;
break;
}
return mScrolling;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
return true;
case MotionEvent.ACTION_UP:
int deltaX = (int) (event.getX() - touchDownX);
int deltaY = (int) (event.getY() - touchDownY);
int slop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
if (Math.abs(deltaX) > slop) {
// swipe left
if (deltaX < -Math.abs(deltaY) * 2) {
// TODO 左滑操作
}
// swipe right
if (deltaX >= Math.abs(deltaY) * 2) {
// TODO 右滑操作
}
}
break;
}
return super.onTouchEvent(event);
}