Просмотр исходного кода

feat: 图片控件单选问题修复

DoggyZhang 2 месяцев назад
Родитель
Сommit
c522fd01f2

+ 1 - 1
frame/bom/build.gradle

@@ -6,7 +6,7 @@ plugins {
 ext {
     GROUP_ID = 'com.wenext.android'
     ARTIFACT_ID = 'frame-bom'
-    VERSION = '6.2.4'
+    VERSION = '6.2.5'
 }
 
 dependencies {

+ 1 - 1
frame/image/build.gradle

@@ -7,7 +7,7 @@ plugins {
 ext {
     GROUP_ID = 'com.wenext.android'
     ARTIFACT_ID = 'frame-image'
-    VERSION = '6.0.8'
+    VERSION = '6.0.9'
 }
 
 if (project.FRAME_DEBUG != "true") {

+ 31 - 14
frame/image/src/main/java/com/adealink/frame/image/view/zoomable/MultiPointerGestureDetector.java

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