diff --git a/library/src/main/java/com/daimajia/swipe/SwipeLayout.java b/library/src/main/java/com/daimajia/swipe/SwipeLayout.java index 841958a..df5efc1 100644 --- a/library/src/main/java/com/daimajia/swipe/SwipeLayout.java +++ b/library/src/main/java/com/daimajia/swipe/SwipeLayout.java @@ -28,6 +28,7 @@ public class SwipeLayout extends FrameLayout { private ShowMode mShowMode; private List mSwipeListeners = new ArrayList(); + private List mSwipeDeniers = new ArrayList(); private Map> mRevealListeners = new HashMap>(); private Map mShowEntirely = new HashMap(); @@ -82,6 +83,31 @@ public class SwipeLayout extends FrameLayout { mSwipeListeners.clear(); } + public static interface SwipeDenier { + /* + * Called in onInterceptTouchEvent + * Determines if this swipe event should be denied + * Implement this interface if you are using views with swipe gestures + * As a child of SwipeLayout + * + * @return true deny + * false allow + */ + public boolean shouldDenySwipe(MotionEvent ev); + } + + public void addSwipeDenier(SwipeDenier denier) { + mSwipeDeniers.add(denier); + } + + public void removeSwipeDenier(SwipeDenier denier) { + mSwipeDeniers.remove(denier); + } + + public void removeAllSwipeDeniers() { + mSwipeDeniers.clear(); + } + public interface OnRevealListener { public void onReveal(View child, DragEdge edge, float fraction, int distance); } @@ -615,6 +641,12 @@ public class SwipeLayout extends FrameLayout { @Override public boolean onInterceptTouchEvent(MotionEvent ev) { + for (SwipeDenier denier : mSwipeDeniers) { + if (denier != null && denier.shouldDenySwipe(ev)) { + return false; + } + } + return mDragHelper.shouldInterceptTouchEvent(ev); }