From 4d5af6dd64bf778ed34bf3f0e223ecb9395a1629 Mon Sep 17 00:00:00 2001 From: Heinrich Reimer Date: Thu, 1 Sep 2016 16:02:44 +0200 Subject: [PATCH] Fixes #113 --- .../view/SwipeBlockableViewPager.java | 48 ++++++++++++------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/library/src/main/java/com/heinrichreimersoftware/materialintro/view/SwipeBlockableViewPager.java b/library/src/main/java/com/heinrichreimersoftware/materialintro/view/SwipeBlockableViewPager.java index 3349857..90c2d1d 100644 --- a/library/src/main/java/com/heinrichreimersoftware/materialintro/view/SwipeBlockableViewPager.java +++ b/library/src/main/java/com/heinrichreimersoftware/materialintro/view/SwipeBlockableViewPager.java @@ -2,6 +2,7 @@ import android.content.Context; import android.support.annotation.IntDef; +import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.MotionEvent; @@ -21,7 +22,7 @@ public class SwipeBlockableViewPager extends ViewPager { private static final int SWIPE_DIRECTION_RIGHT = -1; - private static final int SWIPE_THRESHOLD = 5; + private static final int SWIPE_THRESHOLD = 0; private float initialX; @@ -29,6 +30,8 @@ public class SwipeBlockableViewPager extends ViewPager { private boolean swipeLeftEnabled = true; + private boolean locked = false; + public SwipeBlockableViewPager(Context context) { super(context); } @@ -37,40 +40,51 @@ public SwipeBlockableViewPager(Context context, AttributeSet attrs) { super(context, attrs); } - public boolean isSwipeRightEnabled() { - return swipeRightEnabled; - } - public void setSwipeRightEnabled(boolean swipeRightEnabled) { this.swipeRightEnabled = swipeRightEnabled; } - public boolean isSwipeLeftEnabled() { - return swipeLeftEnabled; - } - public void setSwipeLeftEnabled(boolean swipeLeftEnabled) { this.swipeLeftEnabled = swipeLeftEnabled; } @Override public boolean onTouchEvent(MotionEvent event) { - if (getSwipeDirection(event) == SWIPE_DIRECTION_RIGHT && !swipeRightEnabled) { - return false; - } else if (getSwipeDirection(event) == SWIPE_DIRECTION_LEFT && !swipeLeftEnabled) { - return false; - } - return super.onTouchEvent(event); + return handleTouchEvent(event) && super.onTouchEvent(event); } @Override public boolean onInterceptTouchEvent(MotionEvent event) { + return handleTouchEvent(event) && super.onInterceptTouchEvent(event); + } + + private boolean handleTouchEvent(MotionEvent event) { if (getSwipeDirection(event) == SWIPE_DIRECTION_RIGHT && !swipeRightEnabled) { + if (!locked) { + updatePosition(); + locked = true; + } return false; - } else if (getSwipeDirection(event) == SWIPE_DIRECTION_LEFT && !swipeLeftEnabled) { + } + else if (getSwipeDirection(event) == SWIPE_DIRECTION_LEFT && !swipeLeftEnabled) { + if (!locked) { + updatePosition(); + locked = true; + } return false; } - return super.onInterceptTouchEvent(event); + locked = false; + return true; + } + + private void updatePosition() { + int currentItem = getCurrentItem(); + scrollTo(currentItem * getWidth(), getScrollY()); + PagerAdapter adapter = getAdapter(); + if (adapter != null) { + adapter.notifyDataSetChanged(); + } + setCurrentItem(currentItem); } @SwipeDirection