Compare commits

...

5 Commits

Author SHA1 Message Date
daimajia 8426ef60d6 remove useless part when declare List. 2015-06-11 21:47:52 +08:00
daimajia 1c01f6d4d3 add brackets 2015-06-11 21:39:51 +08:00
daimajia 168d4d435e easy understanding sample 2015-05-17 10:09:02 +08:00
daimajia 8ad6b1792d add removeAllSwipeListener. fix #138 2015-05-17 09:31:02 +08:00
daimajia 1f70d1b139 Prettify the code and remove useless public descriptor 2015-05-17 09:28:59 +08:00
2 changed files with 190 additions and 137 deletions

View File

@ -53,7 +53,8 @@ public class ListViewExample extends Activity {
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
((SwipeLayout)(mListView.getChildAt(position - mListView.getFirstVisiblePosition()))).open(true);
Toast.makeText(mContext, "Click", Toast.LENGTH_SHORT).show();
// ((SwipeLayout) (mListView.getChildAt(position - mListView.getFirstVisiblePosition()))).open(true);
}
});
mListView.setOnTouchListener(new View.OnTouchListener() {

View File

@ -43,15 +43,15 @@ public class SwipeLayout extends FrameLayout {
private ViewDragHelper mDragHelper;
private int mDragDistance = 0;
private LinkedHashMap<DragEdge, View> mDragEdges = new LinkedHashMap<DragEdge, View>();
private LinkedHashMap<DragEdge, View> mDragEdges = new LinkedHashMap<>();
private ShowMode mShowMode;
private float[] mEdgeSwipesOffset = new float[4];
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>();
private List<SwipeListener> mSwipeListeners = new ArrayList<>();
private List<SwipeDenier> mSwipeDeniers = new ArrayList<>();
private Map<View, ArrayList<OnRevealListener>> mRevealListeners = new HashMap<>();
private Map<View, Boolean> mShowEntirely = new HashMap<>();
private DoubleClickListener mDoubleClickListener;
@ -59,14 +59,14 @@ public class SwipeLayout extends FrameLayout {
private boolean[] mSwipesEnabled = new boolean[]{true, true, true, true};
private boolean mClickToClose = false;
public static enum DragEdge {
public enum DragEdge {
Left,
Top,
Right,
Bottom
}
public static enum ShowMode {
public enum ShowMode {
LayDown,
PullOut
}
@ -111,17 +111,17 @@ public class SwipeLayout extends FrameLayout {
}
public interface SwipeListener {
public void onStartOpen(SwipeLayout layout);
void onStartOpen(SwipeLayout layout);
public void onOpen(SwipeLayout layout);
void onOpen(SwipeLayout layout);
public void onStartClose(SwipeLayout layout);
void onStartClose(SwipeLayout layout);
public void onClose(SwipeLayout layout);
void onClose(SwipeLayout layout);
public void onUpdate(SwipeLayout layout, int leftOffset, int topOffset);
void onUpdate(SwipeLayout layout, int leftOffset, int topOffset);
public void onHandRelease(SwipeLayout layout, float xvel, float yvel);
void onHandRelease(SwipeLayout layout, float xvel, float yvel);
}
public void addSwipeListener(SwipeListener l) {
@ -132,7 +132,11 @@ public class SwipeLayout extends FrameLayout {
mSwipeListeners.remove(l);
}
public static interface SwipeDenier {
public void removeAllSwipeListener() {
mSwipeListeners.clear();
}
public interface SwipeDenier {
/*
* Called in onInterceptTouchEvent Determines if this swipe event should
* be denied Implement this interface if you are using views with swipe
@ -140,7 +144,7 @@ public class SwipeLayout extends FrameLayout {
*
* @return true deny false allow
*/
public boolean shouldDenySwipe(MotionEvent ev);
boolean shouldDenySwipe(MotionEvent ev);
}
public void addSwipeDenier(SwipeDenier denier) {
@ -156,7 +160,7 @@ public class SwipeLayout extends FrameLayout {
}
public interface OnRevealListener {
public void onReveal(View child, DragEdge edge, float fraction, int distance);
void onReveal(View child, DragEdge edge, float fraction, int distance);
}
/**
@ -326,6 +330,7 @@ public class SwipeLayout extends FrameLayout {
}
boolean isCloseBeforeDrag = true;
@Override
public void onViewReleased(View releasedChild, float xvel, float yvel) {
super.onViewReleased(releasedChild, xvel, yvel);
@ -642,7 +647,7 @@ public class SwipeLayout extends FrameLayout {
* to support it from API 8.
*/
public interface OnLayout {
public void onLayout(SwipeLayout v);
void onLayout(SwipeLayout v);
}
private List<OnLayout> mOnLayoutListeners;
@ -655,23 +660,29 @@ public class SwipeLayout extends FrameLayout {
public void removeOnLayoutListener(OnLayout l) {
if (mOnLayoutListeners != null) mOnLayoutListeners.remove(l);
}
public void clearDragEdge() {
mDragEdges.clear();
}
public void setDrag(DragEdge dragEdge, int childId) {
clearDragEdge();
addDrag(dragEdge, childId);
}
public void setDrag(DragEdge dragEdge, View child) {
clearDragEdge();
addDrag(dragEdge, child);
}
public void addDrag(DragEdge dragEdge, int childId) {
addDrag(dragEdge, findViewById(childId), null);
}
public void addDrag(DragEdge dragEdge, View child) {
addDrag(dragEdge, child, null);
}
public void addDrag(DragEdge dragEdge, View child, ViewGroup.LayoutParams params) {
if (child == null) return;
@ -683,16 +694,25 @@ public class SwipeLayout extends FrameLayout {
}
int gravity = -1;
switch (dragEdge) {
case Left:gravity = Gravity.LEFT;break;
case Right:gravity = Gravity.RIGHT;break;
case Top:gravity = Gravity.TOP;break;
case Bottom:gravity = Gravity.BOTTOM;break;
case Left:
gravity = Gravity.LEFT;
break;
case Right:
gravity = Gravity.RIGHT;
break;
case Top:
gravity = Gravity.TOP;
break;
case Bottom:
gravity = Gravity.BOTTOM;
break;
}
if (params instanceof FrameLayout.LayoutParams) {
((LayoutParams) params).gravity = gravity;
}
addView(child, 0, params);
}
@Override
public void addView(View child, int index, ViewGroup.LayoutParams params) {
if (child == null) return;
@ -771,6 +791,7 @@ public class SwipeLayout extends FrameLayout {
}
private boolean mIsBeingDragged;
private void checkCanDrag(MotionEvent ev) {
if (mIsBeingDragged) return;
if (getOpenStatus() == Status.Middle) {
@ -843,6 +864,7 @@ public class SwipeLayout extends FrameLayout {
}
mIsBeingDragged = !doNothing;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (!isSwipeEnabled()) {
@ -932,6 +954,7 @@ public class SwipeLayout extends FrameLayout {
return super.onTouchEvent(event) || mIsBeingDragged || action == MotionEvent.ACTION_DOWN;
}
public boolean isClickToClose() {
return mClickToClose;
}
@ -987,6 +1010,7 @@ public class SwipeLayout extends FrameLayout {
public void setBottomSwipeEnabled(boolean bottomSwipeEnabled) {
this.mSwipesEnabled[DragEdge.Bottom.ordinal()] = bottomSwipeEnabled;
}
private boolean insideAdapterView() {
return getAdapterView() != null;
}
@ -1011,6 +1035,7 @@ public class SwipeLayout extends FrameLayout {
}
}
}
private boolean performAdapterViewItemLongClick() {
if (getOpenStatus() != Status.Close) return false;
ViewParent t = getParent();
@ -1039,6 +1064,7 @@ public class SwipeLayout extends FrameLayout {
}
return false;
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
@ -1062,13 +1088,17 @@ public class SwipeLayout extends FrameLayout {
}
}
}
OnClickListener clickListener;
@Override
public void setOnClickListener(OnClickListener l) {
super.setOnClickListener(l);
clickListener = l;
}
OnLongClickListener longClickListener;
@Override
public void setOnLongClickListener(OnLongClickListener l) {
super.setOnLongClickListener(l);
@ -1076,6 +1106,7 @@ public class SwipeLayout extends FrameLayout {
}
private Rect hitSurfaceRect;
private boolean isTouchOnSurface(MotionEvent ev) {
View surfaceView = getSurfaceView();
if (surfaceView == null) {
@ -1087,6 +1118,7 @@ public class SwipeLayout extends FrameLayout {
surfaceView.getHitRect(hitSurfaceRect);
return hitSurfaceRect.contains((int) ev.getX(), (int) ev.getY());
}
private GestureDetector gestureDetector = new GestureDetector(getContext(), new SwipeDetector());
class SwipeDetector extends GestureDetector.SimpleOnGestureListener {
@ -1097,6 +1129,7 @@ public class SwipeLayout extends FrameLayout {
}
return super.onSingleTapUp(e);
}
@Override
public boolean onDoubleTap(MotionEvent e) {
if (mDoubleClickListener != null) {
@ -1151,13 +1184,17 @@ public class SwipeLayout extends FrameLayout {
return mShowMode;
}
/**return null if there is no surface view(no children) */
/**
* return null if there is no surface view(no children)
*/
public View getSurfaceView() {
if (getChildCount() == 0) return null;
return getChildAt(getChildCount() - 1);
}
/**return null if there is no bottom view */
/**
* return null if there is no bottom view
*/
@Nullable
public View getCurrentBottomView() {
List<View> bottoms = getBottomViews();
@ -1166,6 +1203,7 @@ public class SwipeLayout extends FrameLayout {
}
return null;
}
/**
* @return all bottomViews: left, top, right, bottom (may null if the edge is not set)
*/
@ -1364,6 +1402,7 @@ public class SwipeLayout extends FrameLayout {
/**
* a helper function to compute the Rect area that surface will hold in.
*
* @param open open status or close status.
*/
private Rect computeSurfaceLayoutArea(boolean open) {
@ -1438,7 +1477,7 @@ public class SwipeLayout extends FrameLayout {
}
public interface DoubleClickListener {
public void onDoubleClick(SwipeLayout layout, boolean surface);
void onDoubleClick(SwipeLayout layout, boolean surface);
}
private int dp2px(float dp) {
@ -1446,7 +1485,9 @@ public class SwipeLayout extends FrameLayout {
}
/**Deprecated, use {@link #setDrag(DragEdge, View)} */
/**
* Deprecated, use {@link #setDrag(DragEdge, View)}
*/
@Deprecated
public void setDragEdge(DragEdge dragEdge) {
clearDragEdge();
@ -1463,17 +1504,22 @@ public class SwipeLayout extends FrameLayout {
}
}
}
public Map<DragEdge, View> getDragEdgeMap() {
return mDragEdges;
}
/**Deprecated, use {@link #getDragEdgeMap()} */
/**
* Deprecated, use {@link #getDragEdgeMap()}
*/
@Deprecated
public List<DragEdge> getDragEdges() {
return new ArrayList<DragEdge>(mDragEdges.keySet());
}
/**Deprecated, use {@link #setDrag(DragEdge, View)} */
/**
* Deprecated, use {@link #setDrag(DragEdge, View)}
*/
@Deprecated
public void setDragEdges(List<DragEdge> dragEdges) {
clearDragEdge();
@ -1488,12 +1534,15 @@ public class SwipeLayout extends FrameLayout {
}
}
/**Deprecated, use {@link #addDrag(DragEdge, View)} */
/**
* Deprecated, use {@link #addDrag(DragEdge, View)}
*/
@Deprecated
public void setDragEdges(DragEdge... mDragEdges) {
clearDragEdge();
setDragEdges(Arrays.asList(mDragEdges));
}
/**
* Deprecated, use {@link #addDrag(DragEdge, View)}
* When using multiple drag edges it's a good idea to pass the ids of the views that
@ -1522,13 +1571,16 @@ public class SwipeLayout extends FrameLayout {
if (currentBottomView != null) {
if (mCurrentDragEdge == DragEdge.Left || mCurrentDragEdge == DragEdge.Right) {
mDragDistance = currentBottomView.getMeasuredWidth() - dp2px(getCurrentOffset());
} else {
mDragDistance = currentBottomView.getMeasuredHeight() - dp2px(getCurrentOffset());
}
else mDragDistance = currentBottomView.getMeasuredHeight() - dp2px(getCurrentOffset());
}
if (mShowMode == ShowMode.PullOut)
if (mShowMode == ShowMode.PullOut) {
layoutPullOut();
else if (mShowMode == ShowMode.LayDown) layoutLayDown();
} else if (mShowMode == ShowMode.LayDown) {
layoutLayDown();
}
safeBottomView();
}