Skip to content

Commit 6f9cbff

Browse files
TiFuTino Fuhrmann
authored andcommitted
Added proximity condition to double click detection
1 parent d63ca5f commit 6f9cbff

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

signature-pad/src/main/java/com/github/gcacace/signaturepad/views/SignaturePad.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ public class SignaturePad extends View {
5757
private long mFirstClick;
5858
private int mCountClick;
5959
private static final int DOUBLE_CLICK_DELAY_MS = 200;
60+
private static final float DOUBLE_CLICK_SQUARED_MOVE_DIST = 75;
6061

6162
//Default attribute values
6263
private final int DEFAULT_ATTR_PEN_MIN_WIDTH_PX = 3;
@@ -212,7 +213,6 @@ public boolean onTouchEvent(MotionEvent event) {
212213
case MotionEvent.ACTION_DOWN:
213214
getParent().requestDisallowInterceptTouchEvent(true);
214215
mPoints.clear();
215-
if (isDoubleClick()) break;
216216
mLastTouchX = eventX;
217217
mLastTouchY = eventY;
218218
addPoint(getNewPoint(eventX, eventY));
@@ -224,6 +224,9 @@ public boolean onTouchEvent(MotionEvent event) {
224224
break;
225225

226226
case MotionEvent.ACTION_UP:
227+
if (this.isDoubleClick(eventX, eventY)) {
228+
break;
229+
}
227230
resetDirtyRect(eventX, eventY);
228231
addPoint(getNewPoint(eventX, eventY));
229232
getParent().requestDisallowInterceptTouchEvent(true);
@@ -244,6 +247,12 @@ public boolean onTouchEvent(MotionEvent event) {
244247
return true;
245248
}
246249

250+
private float calculateSquaredDistance(float startX, float startY, float endX, float endY) {
251+
float xDist = endX - startX;
252+
float yDist = endY - startY;
253+
return xDist * xDist + yDist * yDist;
254+
}
255+
247256
@Override
248257
protected void onDraw(Canvas canvas) {
249258
if (mSignatureBitmap != null) {
@@ -404,7 +413,7 @@ public Bitmap getTransparentSignatureBitmap(boolean trimBlankSpace) {
404413
return Bitmap.createBitmap(mSignatureBitmap, xMin, yMin, xMax - xMin, yMax - yMin);
405414
}
406415

407-
private boolean isDoubleClick() {
416+
private boolean isDoubleClick(float currentX, float currentY) {
408417
if (mClearOnDoubleClick) {
409418
if (mFirstClick != 0 && System.currentTimeMillis() - mFirstClick > DOUBLE_CLICK_DELAY_MS) {
410419
mCountClick = 0;
@@ -414,7 +423,8 @@ private boolean isDoubleClick() {
414423
mFirstClick = System.currentTimeMillis();
415424
} else if (mCountClick == 2) {
416425
long lastClick = System.currentTimeMillis();
417-
if (lastClick - mFirstClick < DOUBLE_CLICK_DELAY_MS) {
426+
float dist = this.calculateSquaredDistance(mLastTouchX, mLastTouchY, currentX, currentY);
427+
if (lastClick - mFirstClick < DOUBLE_CLICK_DELAY_MS && dist < DOUBLE_CLICK_SQUARED_MOVE_DIST) {
418428
this.clearView();
419429
return true;
420430
}

0 commit comments

Comments
 (0)