From 52206628d44a4a53b1f9768f65fd74cbe9060801 Mon Sep 17 00:00:00 2001 From: 0000248716-lijiaxiao Date: Sun, 25 Apr 2021 15:16:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/slice/MainAbilitySlice.java | 2 +- .../library/MoveGestureDetector.java | 15 ++-- .../library/RotateGestureDetector.java | 33 +++++---- .../library/ShoveGestureDetector.java | 72 ++++++++++++++----- .../library/TwoFingerGestureDetector.java | 25 +------ 5 files changed, 82 insertions(+), 65 deletions(-) diff --git a/entry/src/main/java/com/almeros/android/multitouch/example/slice/MainAbilitySlice.java b/entry/src/main/java/com/almeros/android/multitouch/example/slice/MainAbilitySlice.java index 80632ff..4e7ad7c 100644 --- a/entry/src/main/java/com/almeros/android/multitouch/example/slice/MainAbilitySlice.java +++ b/entry/src/main/java/com/almeros/android/multitouch/example/slice/MainAbilitySlice.java @@ -63,7 +63,7 @@ public class MainAbilitySlice extends AbilitySlice implements Component.TouchEve imageSource = ImageSource.create(resource, null); pixelMap = imageSource.createPixelmap(null); } catch (IOException e) { - e.printStackTrace(); + System.out.println(e); } if (pixelMap != null) { // 全局变量 PixelMapHolder diff --git a/library/src/main/java/com/almeros/android/multitouch/library/MoveGestureDetector.java b/library/src/main/java/com/almeros/android/multitouch/library/MoveGestureDetector.java index a0d5e6e..52f4918 100644 --- a/library/src/main/java/com/almeros/android/multitouch/library/MoveGestureDetector.java +++ b/library/src/main/java/com/almeros/android/multitouch/library/MoveGestureDetector.java @@ -11,8 +11,8 @@ public class MoveGestureDetector { private static final int INVALID_POINTER_INDEX = -1; private int mPointerIndex; private OnMoveGestureListener mListener; - private float mX; - private float mY; +// private float mX; +// private float mY; private float lastX; private float lastY; private float tempX; @@ -35,18 +35,16 @@ public class MoveGestureDetector { switch (event.getAction()) { case TouchEvent.PRIMARY_POINT_DOWN: flag = true; - mX = event.getPointerPosition(0).getX(); - mY = event.getPointerPosition(0).getY(); +// mX = event.getPointerPosition(0).getX(); +// mY = event.getPointerPosition(0).getY(); lastX = event.getPointerPosition(0).getX(); lastY = event.getPointerPosition(0).getY(); mPointerIndex = event.getPointerId(0); - // System.out.println("----------------------*********" + mY + "*******" + lastY); break; case TouchEvent.POINT_MOVE: if (mPointerIndex != INVALID_POINTER_INDEX && event.getPointerCount() != 0) { - // System.out.println("----------------------*********" + mY + "*******" + lastY); - mX = event.getPointerPosition(0).getX(); - mY = event.getPointerPosition(0).getY(); + float mX = event.getPointerPosition(0).getX(); + float mY = event.getPointerPosition(0).getY(); if (Math.abs(mX - lastX) > 3 && Math.abs(mY - lastY) > 3) { tempX = tempX + mX - lastX; if (Math.abs(mY - lastY) < 100) { @@ -57,7 +55,6 @@ public class MoveGestureDetector { } lastX = mX; lastY = mY; - // System.out.println("----------------------************************************" + tempX + "*******" + tempY); } } break; diff --git a/library/src/main/java/com/almeros/android/multitouch/library/RotateGestureDetector.java b/library/src/main/java/com/almeros/android/multitouch/library/RotateGestureDetector.java index 1a18454..cb78017 100644 --- a/library/src/main/java/com/almeros/android/multitouch/library/RotateGestureDetector.java +++ b/library/src/main/java/com/almeros/android/multitouch/library/RotateGestureDetector.java @@ -70,7 +70,7 @@ public class RotateGestureDetector { if (mListener != null) { mListener.onRotation(this); } - if (Math.abs(fY - nfY) > 50 || Math.abs(sY - nsY) > 50){ + if (Math.abs(fY - nfY) > 50 || Math.abs(sY - nsY) > 50) { fX = nfX; fY = nfY; sX = nsX; @@ -94,7 +94,8 @@ public class RotateGestureDetector { (float) Math.toDegrees((float) Math.atan2((fy1 - fy2), (fx1 - fx2))), (float) Math.toDegrees((float) Math.atan2((sy1 - sy2), (sx1 - sx2)))); - calculateAngleDelta2(sx1, sy1, sx2, sy2); + clockwise(sy1, sy2); + anticlockwise(sy1, sy2); } private void calculateAngleDelta(float angleFrom, float angleTo) { @@ -106,44 +107,46 @@ public class RotateGestureDetector { // } } - private void calculateAngleDelta2(float nfX, float nfY, float nsX, float nsY) { + private void clockwise(float nfY, float nsY) { //顺时针旋转 - if (sX > fX){//第一个手指在右,第二个手指在左 + if (sX > fX) {//第一个手指在右,第二个手指在左 if ((fY > nfY && sY < nsY)) { - if (Math.abs(fY - nfY) > 50 || Math.abs(sY - nsY) > 50){ - if (mAngle == 360){ + if (Math.abs(fY - nfY) > 50 || Math.abs(sY - nsY) > 50) { + if (mAngle == 360) { mAngle = 0; } mAngle = mAngle + 10; } } } - if (sX < fX){//第一个手指在左,第二个手指在右 + if (sX < fX) {//第一个手指在左,第二个手指在右 if ((fY < nfY && sY > nsY)) { - if (Math.abs(fY - nfY) > 50 || Math.abs(sY - nsY) > 50){ - if (mAngle == 360){ + if (Math.abs(fY - nfY) > 50 || Math.abs(sY - nsY) > 50) { + if (mAngle == 360) { mAngle = 0; } mAngle = mAngle + 10; } } } + } + private void anticlockwise(float nfY, float nsY) { //逆时针旋转 - if (sX > fX){//第一个手指在右,第二个手指在左 + if (sX > fX) {//第一个手指在右,第二个手指在左 if ((fY < nfY && sY > nsY)) { - if (Math.abs(fY - nfY) > 50 || Math.abs(sY - nsY) > 50){ - if (mAngle == -360){ + if (Math.abs(fY - nfY) > 50 || Math.abs(sY - nsY) > 50) { + if (mAngle == -360) { mAngle = 0; } mAngle = mAngle - 10; } } } - if (sX < fX){//第一个手指在左,第二个手指在右 + if (sX < fX) {//第一个手指在左,第二个手指在右 if ((fY > nfY && sY < nsY)) { - if (Math.abs(fY - nfY) > 50 || Math.abs(sY - nsY) > 50){ - if (mAngle == -360){ + if (Math.abs(fY - nfY) > 50 || Math.abs(sY - nsY) > 50) { + if (mAngle == -360) { mAngle = 0; } mAngle = mAngle - 10; diff --git a/library/src/main/java/com/almeros/android/multitouch/library/ShoveGestureDetector.java b/library/src/main/java/com/almeros/android/multitouch/library/ShoveGestureDetector.java index f77a7ff..60ddecd 100644 --- a/library/src/main/java/com/almeros/android/multitouch/library/ShoveGestureDetector.java +++ b/library/src/main/java/com/almeros/android/multitouch/library/ShoveGestureDetector.java @@ -95,7 +95,8 @@ public class ShoveGestureDetector { nfX = event.getPointerPosition(mPointerIndex2).getX(); nfY = event.getPointerPosition(mPointerIndex2).getY(); - calculateAlphaBetweenLines(nsX, nsY, nfX, nfY); + calculateGrow(nsX, nsY, nfX, nfY); + calculateDecrease(nsX, nsY, nfX, nfY); if (mListener != null) { mListener.onShove(this); @@ -116,35 +117,70 @@ public class ShoveGestureDetector { return true; } - private void calculateAlphaBetweenLines(float sx1, float sy1, float sx2, float sy2) { +// private void calculateAlpha(float sx1, float sy1, float sx2, float sy2) { +// float absX = Math.abs(sX - sx1); +// float absY = Math.abs(sY - sy1); +// float absXt = Math.abs(fX - sx2); +// float absYt = Math.abs(fY - sy2); +// +// if (fY > sy2) { +// if (absX < 5 && absY < 5 && absYt > 5) { +// mAlpha = mAlpha - 0.05f; +// } +// if (absXt < 5 && absYt < 5 && absY > 5) { +// mAlpha = mAlpha - 0.05f; +// } +// } +// if (fY < sy2) { +// if (absX < 5 && absY < 5 && absYt > 5) { +// mAlpha = mAlpha + 0.05f; +// } +// if (absXt < 5 && absYt < 5 && absY > 5) { +// mAlpha = mAlpha + 0.05f; +// } +// } +// if (sY > sy1 + 3 && fY > sy2 + 3 && absX < 5 && absXt < 5) { +// mAlpha = mAlpha - 0.05f; +// } +// if (sY < sy1 - 3 && fY < sy2 - 3 && absX < 5 && absXt < 5) { +// mAlpha = mAlpha + 0.05f; +// } +// } + + private void calculateGrow(float sx1, float sy1, float sx2, float sy2) { float absX = Math.abs(sX - sx1); float absY = Math.abs(sY - sy1); - float absXt = Math.abs(fX - sx2); float absYt = Math.abs(fY - sy2); - - if (fY > sy2){ - if (absX < 5 && absY <5 && absYt > 5){ - mAlpha = mAlpha - 0.05f; + if (fY < sy2) { + if (absX < 5 && absY < 5 && absYt > 5) { + mAlpha = mAlpha + 0.05f; } - if (absXt < 5 && absYt <5 && absY > 5){ - mAlpha = mAlpha - 0.05f; + if (absXt < 5 && absYt < 5 && absY > 5) { + mAlpha = mAlpha + 0.05f; } } - if (fY < sy2){ - if (absX < 5 && absY <5 && absYt > 5){ - mAlpha = mAlpha + 0.05f; + if (sY < sy1 - 3 && fY < sy2 - 3 && absX < 5 && absXt < 5) { + mAlpha = mAlpha + 0.05f; + } + } + + private void calculateDecrease(float sx1, float sy1, float sx2, float sy2) { + float absX = Math.abs(sX - sx1); + float absY = Math.abs(sY - sy1); + float absXt = Math.abs(fX - sx2); + float absYt = Math.abs(fY - sy2); + if (fY > sy2) { + if (absX < 5 && absY < 5 && absYt > 5) { + mAlpha = mAlpha - 0.05f; } - if (absXt < 5 && absYt <5 && absY > 5){ - mAlpha = mAlpha + 0.05f; + if (absXt < 5 && absYt < 5 && absY > 5) { + mAlpha = mAlpha - 0.05f; } } - if (sY > sy1 + 3 && fY > sy2 + 3 && absX < 5 && absXt < 5){ + if (sY > sy1 + 3 && fY > sy2 + 3 && absX < 5 && absXt < 5) { mAlpha = mAlpha - 0.05f; } - if (sY < sy1 - 3 && fY < sy2 - 3 && absX < 5 && absXt < 5){ - mAlpha = mAlpha + 0.05f; - } } /** diff --git a/library/src/main/java/com/almeros/android/multitouch/library/TwoFingerGestureDetector.java b/library/src/main/java/com/almeros/android/multitouch/library/TwoFingerGestureDetector.java index a1a8590..0952e2a 100644 --- a/library/src/main/java/com/almeros/android/multitouch/library/TwoFingerGestureDetector.java +++ b/library/src/main/java/com/almeros/android/multitouch/library/TwoFingerGestureDetector.java @@ -25,23 +25,13 @@ import ohos.multimodalinput.event.TouchEvent; */ public abstract class TwoFingerGestureDetector extends BaseGestureDetector { - private final float mEdgeSlop = 0; - private float mRightSlopEdge; - private float mBottomSlopEdge; - protected float mPrevFingerDiffX; protected float mPrevFingerDiffY; protected float mCurrFingerDiffX; protected float mCurrFingerDiffY; - private float mCurrLen; - private float mPrevLen; - public TwoFingerGestureDetector(Context context) { super(context); - -// ViewConfiguration config = ViewConfiguration.get(context); -// mEdgeSlop = config.getScaledEdgeSlop(); } @Override @@ -55,9 +45,6 @@ public abstract class TwoFingerGestureDetector extends BaseGestureDetector { final TouchEvent prev = mPrevEvent; - mCurrLen = -1; - mPrevLen = -1; - // Previous final float px0 = prev.getPointerPosition(0).getX(); final float py0 = prev.getPointerPosition(0).getY(); @@ -117,15 +104,9 @@ public abstract class TwoFingerGestureDetector extends BaseGestureDetector { * @return float */ protected boolean isSloppyGesture(TouchEvent event) { - // As orientation can change, query the metrics in touch down -// DisplayMetrics metrics = mContext.getResources().getDisplayMetrics(); -// mRightSlopEdge = metrics.widthPixels - mEdgeSlop; -// mBottomSlopEdge = metrics.heightPixels - mEdgeSlop; - mRightSlopEdge = 1080 - mEdgeSlop; - mBottomSlopEdge = 1920 - mEdgeSlop; - final float edgeSlop = mEdgeSlop; - final float rightSlop = mRightSlopEdge; - final float bottomSlop = mBottomSlopEdge; + final float edgeSlop = 0; + final float rightSlop = 1080; + final float bottomSlop = 0; final float x0 = event.getPointerScreenPosition(event.getIndex()).getX(); final float y0 = event.getPointerScreenPosition(event.getIndex()).getY(); -- Gitee