|
@@ -124,7 +124,7 @@ public class MultiPointerGestureDetector {
|
|
|
mOnSwipeDownListener = listener;
|
|
mOnSwipeDownListener = listener;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public void setTapListener(OnTapListener listener){
|
|
|
|
|
|
|
+ public void setTapListener(OnTapListener listener) {
|
|
|
mTapListener = listener;
|
|
mTapListener = listener;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -222,8 +222,8 @@ public class MultiPointerGestureDetector {
|
|
|
// 单指按下时启动长按检测
|
|
// 单指按下时启动长按检测
|
|
|
if (event.getPointerCount() == 1) {
|
|
if (event.getPointerCount() == 1) {
|
|
|
startLongPressCheck(event);
|
|
startLongPressCheck(event);
|
|
|
- handleTapEvent(event);
|
|
|
|
|
}
|
|
}
|
|
|
|
|
+ handleTapEvent(event);
|
|
|
handleMultiPointerEvent(event);
|
|
handleMultiPointerEvent(event);
|
|
|
break;
|
|
break;
|
|
|
|
|
|
|
@@ -234,11 +234,11 @@ public class MultiPointerGestureDetector {
|
|
|
if (mLongPressRunnable != null && event.getPointerCount() == 1) {
|
|
if (mLongPressRunnable != null && event.getPointerCount() == 1) {
|
|
|
float dx = event.getX() - mStartX[0];
|
|
float dx = event.getX() - mStartX[0];
|
|
|
float dy = event.getY() - mStartY[0];
|
|
float dy = event.getY() - mStartY[0];
|
|
|
- if (dx * dx + dy * dy > mTouchSlop * mTouchSlop) {
|
|
|
|
|
|
|
+ if ((dx * dx + dy * dy) > mTouchSlop * mTouchSlop) {
|
|
|
cancelLongPressCheck();
|
|
cancelLongPressCheck();
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+ handleTapEvent(event);
|
|
|
handleMultiPointerEvent(event);
|
|
handleMultiPointerEvent(event);
|
|
|
break;
|
|
break;
|
|
|
|
|
|
|
@@ -246,22 +246,20 @@ public class MultiPointerGestureDetector {
|
|
|
case MotionEvent.ACTION_CANCEL:
|
|
case MotionEvent.ACTION_CANCEL:
|
|
|
handleSwipeFinish(event);
|
|
handleSwipeFinish(event);
|
|
|
cancelLongPressCheck();
|
|
cancelLongPressCheck();
|
|
|
|
|
+ handleTapEvent(event);
|
|
|
handleMultiPointerEvent(event);
|
|
handleMultiPointerEvent(event);
|
|
|
-
|
|
|
|
|
- //检查单点点击
|
|
|
|
|
- if (event.getPointerCount() == 1) {
|
|
|
|
|
- handleTapEvent(event);
|
|
|
|
|
- }
|
|
|
|
|
break;
|
|
break;
|
|
|
|
|
|
|
|
case MotionEvent.ACTION_POINTER_DOWN:
|
|
case MotionEvent.ACTION_POINTER_DOWN:
|
|
|
case MotionEvent.ACTION_POINTER_UP:
|
|
case MotionEvent.ACTION_POINTER_UP:
|
|
|
// 多指操作时取消长按检测
|
|
// 多指操作时取消长按检测
|
|
|
cancelLongPressCheck();
|
|
cancelLongPressCheck();
|
|
|
|
|
+ handleTapEvent(event);
|
|
|
handleMultiPointerEvent(event);
|
|
handleMultiPointerEvent(event);
|
|
|
break;
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
default:
|
|
|
|
|
+ handleTapEvent(event);
|
|
|
handleMultiPointerEvent(event);
|
|
handleMultiPointerEvent(event);
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
@@ -305,20 +303,39 @@ public class MultiPointerGestureDetector {
|
|
|
private float mTapX = 0;
|
|
private float mTapX = 0;
|
|
|
private float mTapY = 0;
|
|
private float mTapY = 0;
|
|
|
|
|
|
|
|
|
|
+ private boolean checkTap = false;
|
|
|
|
|
+
|
|
|
private void handleTapEvent(final MotionEvent event) {
|
|
private void handleTapEvent(final MotionEvent event) {
|
|
|
switch (event.getActionMasked()) {
|
|
switch (event.getActionMasked()) {
|
|
|
case MotionEvent.ACTION_DOWN: {
|
|
case MotionEvent.ACTION_DOWN: {
|
|
|
- mTapX = event.getX();
|
|
|
|
|
- mTapY = event.getY();
|
|
|
|
|
|
|
+ if (event.getPointerCount() == 1) {
|
|
|
|
|
+ checkTap = true;
|
|
|
|
|
+ mTapX = event.getX();
|
|
|
|
|
+ mTapY = event.getY();
|
|
|
|
|
+ }
|
|
|
|
|
+ break;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
case MotionEvent.ACTION_UP: {
|
|
case MotionEvent.ACTION_UP: {
|
|
|
- float dx = event.getX() - mStartX[0];
|
|
|
|
|
- float dy = event.getY() - mStartY[0];
|
|
|
|
|
- if (dx * dx + dy * dy > mTouchSlop * mTouchSlop) {
|
|
|
|
|
|
|
+ if (!checkTap || event.getPointerCount() != 1) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ checkTap = false;
|
|
|
|
|
+ float dx = event.getX() - mTapX;
|
|
|
|
|
+ float dy = event.getY() - mTapY;
|
|
|
|
|
+ if ((dx * dx + dy * dy) <= mTouchSlop * mTouchSlop) {
|
|
|
if (mTapListener != null) {
|
|
if (mTapListener != null) {
|
|
|
mTapListener.onTap();
|
|
mTapListener.onTap();
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ default: {
|
|
|
|
|
+ if (event.getPointerCount() != 1) {
|
|
|
|
|
+ checkTap = false;
|
|
|
|
|
+ }
|
|
|
|
|
+ break;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|