Merge pull request #7 from PeterCxy/patch-2

SwipeLayout: Allow childs to deny swipe gesture
This commit is contained in:
代码家 2014-08-29 17:20:12 +08:00
commit b8457a51d5
1 changed files with 32 additions and 0 deletions

View File

@ -28,6 +28,7 @@ public class SwipeLayout extends FrameLayout {
private ShowMode mShowMode;
private List<SwipeListener> mSwipeListeners = new ArrayList<SwipeListener>();
private List<SwipeDenier> mSwipeDeniers = new ArrayList<SwipeDenier>();
private Map<View, ArrayList<OnRevealListener>> mRevealListeners = new HashMap<View, ArrayList<OnRevealListener>>();
private Map<View, Boolean> mShowEntirely = new HashMap<View, Boolean>();
@ -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);
}