/** * Dismiss the current card. * * @param exitRight True to scroll page to the right */ public void dismissCard(boolean exitRight) { if (onCardChangeListener != null) { onCardChangeListener.onCardDismissed(currentItem, exitRight); } populatePending = false; reversePos = exitRight; setCurrentItemInternal(currentItem + 1, true, false); }
/** * Set scroll state. Will enable hardware layers in children if there is motion. * * @param newState new state */ private void setScrollState(int newState) { if (scrollState == newState) { return; } scrollState = newState; if (onCardChangeListener != null) { onCardChangeListener.onCardScrollStateChanged(newState); } enableLayers(newState != SCROLL_STATE_IDLE); }
/** * Called when page is scrolled. Updates virtualPos of page according to scroll position. * * @param xPos xPos * @return true if scrolled */ private boolean pageScrolled(int xPos) { if (items.size() == 0) { return false; } final int deltaScroll = xPos - lastScroll; virtualPos = reversePos ? virtualPos + deltaScroll : virtualPos - deltaScroll; lastScroll = xPos; final int width = getClientWidth(); final float pageOffset = virtualPos / width; if (onCardChangeListener != null) { onCardChangeListener.onCardScrolled(currentItem, pageOffset, (int) virtualPos); } onPageScrolled(); return true; }
/** * Figure out what the target page would be given current scroll and velocity. * * @return target page */ private int determineTargetPage(int currentPage, float pageOffset, int velocity, int deltaX) { int targetPage; if (Math.abs(deltaX) > flingDistance && Math.abs(velocity) > minimumVelocity) { if (virtualPos < 0) { targetPage = velocity > 0 ? currentPage : currentPage + 1; } else { targetPage = velocity > 0 ? currentPage + 1 : currentPage; } } else { final float truncator = currentPage >= currentItem ? 0.4f : 0.6f; targetPage = (int) (currentPage + pageOffset + truncator); } if (items.size() > 0) { final ItemInfo firstItem = items.get(0); final ItemInfo lastItem = items.get(items.size() - 1); // Only let the user target pages we have items for targetPage = Math.max(firstItem.position, Math.min(targetPage, lastItem.position)); } if (targetPage > currentPage && onCardChangeListener != null) { onCardChangeListener.onCardDismissed(currentPage, virtualPos > 0); } return targetPage; }