From 71f7c72c0989a01d6c1ac9334fcb75eea63d0dae Mon Sep 17 00:00:00 2001 From: Tino Fuhrmann Date: Tue, 26 Dec 2017 16:40:16 +0800 Subject: [PATCH] Added proximity condition to double click detection --- .../gcacace/signaturepad/views/SignaturePad.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/signature-pad/src/main/java/com/github/gcacace/signaturepad/views/SignaturePad.java b/signature-pad/src/main/java/com/github/gcacace/signaturepad/views/SignaturePad.java index 6bf4dbd..e6cf477 100644 --- a/signature-pad/src/main/java/com/github/gcacace/signaturepad/views/SignaturePad.java +++ b/signature-pad/src/main/java/com/github/gcacace/signaturepad/views/SignaturePad.java @@ -57,6 +57,7 @@ public class SignaturePad extends View { private long mFirstClick; private int mCountClick; private static final int DOUBLE_CLICK_DELAY_MS = 200; + private static final float DOUBLE_CLICK_SQUARED_MOVE_DIST = 75; //Default attribute values private final int DEFAULT_ATTR_PEN_MIN_WIDTH_PX = 3; @@ -212,7 +213,6 @@ public boolean onTouchEvent(MotionEvent event) { case MotionEvent.ACTION_DOWN: getParent().requestDisallowInterceptTouchEvent(true); mPoints.clear(); - if (isDoubleClick()) break; mLastTouchX = eventX; mLastTouchY = eventY; addPoint(getNewPoint(eventX, eventY)); @@ -224,6 +224,9 @@ public boolean onTouchEvent(MotionEvent event) { break; case MotionEvent.ACTION_UP: + if (this.isDoubleClick(eventX, eventY)) { + break; + } resetDirtyRect(eventX, eventY); addPoint(getNewPoint(eventX, eventY)); getParent().requestDisallowInterceptTouchEvent(true); @@ -244,6 +247,12 @@ public boolean onTouchEvent(MotionEvent event) { return true; } + private float calculateSquaredMovedDistance(float startX, float startY, float endX, float endY) { + float xDist = endX - startX; + float yDist = endY - startY; + return xDist * xDist + yDist * yDist; + } + @Override protected void onDraw(Canvas canvas) { if (mSignatureBitmap != null) { @@ -404,7 +413,7 @@ public Bitmap getTransparentSignatureBitmap(boolean trimBlankSpace) { return Bitmap.createBitmap(mSignatureBitmap, xMin, yMin, xMax - xMin, yMax - yMin); } - private boolean isDoubleClick() { + private boolean isDoubleClick(float currentX, float currentY) { if (mClearOnDoubleClick) { if (mFirstClick != 0 && System.currentTimeMillis() - mFirstClick > DOUBLE_CLICK_DELAY_MS) { mCountClick = 0; @@ -414,7 +423,8 @@ private boolean isDoubleClick() { mFirstClick = System.currentTimeMillis(); } else if (mCountClick == 2) { long lastClick = System.currentTimeMillis(); - if (lastClick - mFirstClick < DOUBLE_CLICK_DELAY_MS) { + float dist = this.calculateSquaredMovedDistance(mLastTouchX, mLastTouchY, currentX, currentY); + if (lastClick - mFirstClick < DOUBLE_CLICK_DELAY_MS && dist < DOUBLE_CLICK_SQUARED_MOVE_DIST) { this.clearView(); return true; }