From 0674bf63e9073df5b31e6178c0ddc92dd4a478fa Mon Sep 17 00:00:00 2001 From: user Date: Sat, 29 Oct 2016 16:58:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=9A=84=E6=96=87=E4=BB=B6?= =?UTF-8?q?=EF=BC=9ASwipeMenuListView=E3=80=82=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=BA=86=E5=BD=93List=E4=B8=AD=E5=B7=B2=E7=BB=8F=E6=9C=89?= =?UTF-8?q?=E4=B8=80=E4=B8=AAitem=E6=BB=91=E5=BC=80=E4=BA=86(item1)?= =?UTF-8?q?=EF=BC=8C=E6=AD=A4=E6=97=B6=E6=BB=91=E5=8A=A8=E5=8F=A6=E4=B8=80?= =?UTF-8?q?=E4=B8=AAitem(item2)=EF=BC=8Citem1=E4=B8=8D=E5=85=B3=E9=97=AD?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../swipemenulistview/SwipeMenuLayout.java | 4 +-- .../swipemenulistview/SwipeMenuListView.java | 26 +++++++++++++++---- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/library/src/main/java/com/baoyz/swipemenulistview/SwipeMenuLayout.java b/library/src/main/java/com/baoyz/swipemenulistview/SwipeMenuLayout.java index 3601686..e4d8399 100644 --- a/library/src/main/java/com/baoyz/swipemenulistview/SwipeMenuLayout.java +++ b/library/src/main/java/com/baoyz/swipemenulistview/SwipeMenuLayout.java @@ -188,8 +188,8 @@ public boolean onSwipe(MotionEvent event) { case MotionEvent.ACTION_UP: if ((isFling || Math.abs(mDownX - event.getX()) > (mMenuView.getWidth() / 2)) && Math.signum(mDownX - event.getX()) == mSwipeDirection) { - // open - smoothOpenMenu(); + if(state != STATE_OPEN) //判断一下更好 + smoothOpenMenu();// open } else { // close smoothCloseMenu(); diff --git a/library/src/main/java/com/baoyz/swipemenulistview/SwipeMenuListView.java b/library/src/main/java/com/baoyz/swipemenulistview/SwipeMenuListView.java index 48aaea0..de9cc6b 100644 --- a/library/src/main/java/com/baoyz/swipemenulistview/SwipeMenuListView.java +++ b/library/src/main/java/com/baoyz/swipemenulistview/SwipeMenuListView.java @@ -30,6 +30,8 @@ public class SwipeMenuListView extends ListView { private float mDownY; private int mTouchState; private int mTouchPosition; + //the last position/上一次点击的位置 + private int mOldTouchPosition = -1; private SwipeMenuLayout mTouchView; private OnSwipeListener mOnSwipeListener; @@ -160,20 +162,34 @@ public boolean onTouchEvent(MotionEvent ev) { int action = ev.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: - int oldPos = mTouchPosition; - mDownX = ev.getX(); + //int oldPos = mTouchPosition;//this is wrong/这里不能这么写,mTouchPosition与oldPos是永远相等的 + //-1是初始值,根据是否等于-1,判断是否第一次按下 + if(mOldTouchPosition == -1){//-1 is the original value + mOldTouchPosition = mTouchPosition; + } + mDownX = ev.getX(); mDownY = ev.getY(); mTouchState = TOUCH_STATE_NONE; mTouchPosition = pointToPosition((int) ev.getX(), (int) ev.getY()); - - if (mTouchPosition == oldPos && mTouchView != null + //在这里mTouchPosition与oldPos是永远相等的,达不到想要的结果,因为它俩对应一个MotionEvent + /*if (mTouchPosition == oldPos && mTouchView != null + && mTouchView.isOpen()) { + mTouchState = TOUCH_STATE_X; + mTouchView.onSwipe(ev); + return true; + }*/ + //这里的mOldTouchPosition才是上一次的position + if (mTouchPosition == mOldTouchPosition && mTouchView != null && mTouchView.isOpen()) { mTouchState = TOUCH_STATE_X; mTouchView.onSwipe(ev); return true; } - + //当位置不同时,更新mOldTouchPosition + if(mOldTouchPosition != mTouchPosition){ + mOldTouchPosition = mTouchPosition; + } View view = getChildAt(mTouchPosition - getFirstVisiblePosition()); if (mTouchView != null && mTouchView.isOpen()) {