diff --git a/FlipView/FlipLibrary/src/com/aphidmobile/flip/FlipCards.java b/FlipView/FlipLibrary/src/com/aphidmobile/flip/FlipCards.java index 180b5f2..92b3b89 100644 --- a/FlipView/FlipLibrary/src/com/aphidmobile/flip/FlipCards.java +++ b/FlipView/FlipLibrary/src/com/aphidmobile/flip/FlipCards.java @@ -236,13 +236,12 @@ public void invalidateTexture() { backCards.abandonTexture(); } - private int lastPageIndex; + private boolean alreadyFlipped; public synchronized boolean handleTouchEvent(MotionEvent event, boolean isOnTouchEvent) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - // remember page we started on... - lastPageIndex = getPageIndexFromAngle(accumulatedAngle); + alreadyFlipped = false; lastPosition = orientationVertical ? event.getY() : event.getX(); return isOnTouchEvent; case MotionEvent.ACTION_MOVE: @@ -268,7 +267,7 @@ public synchronized boolean handleTouchEvent(MotionEvent event, boolean isOnTouc angleDelta = Math.signum(angleDelta) * MAX_TOUCH_MOVE_ANGLE; // do not flip more than one page with one touch... - if (Math.abs(getPageIndexFromAngle(accumulatedAngle + angleDelta) - lastPageIndex) <= 1) { + if (!alreadyFlipped) { accumulatedAngle += angleDelta; } @@ -287,10 +286,12 @@ public synchronized boolean handleTouchEvent(MotionEvent event, boolean isOnTouc swapCards(); //frontCards becomes the backCards frontCards.resetWithIndex(backCards.getIndex() - 1); controller.flippedToView(anglePageIndex, false); + alreadyFlipped = true; } else if (anglePageIndex == frontCards.getIndex() + 1) { //moved to next page swapCards(); backCards.resetWithIndex(frontCards.getIndex() + 1); controller.flippedToView(anglePageIndex, false); + alreadyFlipped = true; } else throw new RuntimeException(AphidLog.format("Inconsistent states: anglePageIndex: %d, accumulatedAngle %.1f, frontCards %d, backCards %d", anglePageIndex, accumulatedAngle, frontCards.getIndex(), backCards.getIndex())); }