diff --git a/android/src/main/java/com/mpiannucci/reactnativecontextmenu/ContextMenuView.java b/android/src/main/java/com/mpiannucci/reactnativecontextmenu/ContextMenuView.java
index 9fc8eeb9b6b66061fca818a17127ff6f21df3126..f975490e71a72967b112b7ef973119608d67fc68 100644
--- a/android/src/main/java/com/mpiannucci/reactnativecontextmenu/ContextMenuView.java
+++ b/android/src/main/java/com/mpiannucci/reactnativecontextmenu/ContextMenuView.java
@@ -37,6 +37,8 @@ public class ContextMenuView extends ReactViewGroup implements View.OnCreateCont
 
     boolean cancelled = true;
 
+    int[] longPressStartLocation = new int[2];
+
     protected boolean dropdownMenuMode = false;
 
     protected boolean disabled = false;
@@ -61,12 +63,40 @@ public class ContextMenuView extends ReactViewGroup implements View.OnCreateCont
 
             @Override
             public void onLongPress(MotionEvent e) {
+                int[] location = new int[2];
+                getLocationOnScreen(location);
+
+                int dx = location[0] - longPressStartLocation[0];
+                int dy = location[1] - longPressStartLocation[1];
+                double distance = Math.sqrt(dx * dx + dy * dy);
+                // Cancel long press if the user moves their finger more than 10 pixels
+                // (e.g. the context menu is used inside the scrollable component and it
+                // moves as the user scrolls)
+                if (distance > 10) {
+                    cancelled = true;
+                    return;
+                }
+
                 if (!dropdownMenuMode && !disabled) {
                     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                         showContextMenu(e.getX(), e.getY());
                     }
                 }
             }
+
+            @Override
+            public boolean onDoubleTap(MotionEvent e) {
+                if (dropdownMenuMode && !disabled) {
+                    showContextMenu(e.getX(), e.getY());
+                }
+                return super.onSingleTapConfirmed(e);
+            }
+
+            @Override
+            public boolean onDown(MotionEvent e) {
+                getLocationOnScreen(longPressStartLocation);
+                return super.onDown(e);
+            }
         });
     }
 
