/** * 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); }
/** * 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); }
/** * @return content width */ private int getClientWidth() { return getMeasuredWidth() - getPaddingLeft() - getPaddingRight(); }
/** * This method will be invoked when the current page is scrolled, either as part * of a programmatically initiated smooth scroll or a user initiated touch scroll. */ protected void onPageScrolled() { final int scrollX = getScrollX(); final int childCount = getChildCount(); for (int i = 0; i < childCount; i++) { final View child = getChildAt(i); final float transformPos = (float) (child.getLeft() - scrollX) / getClientWidth(); transformPage(child, transformPos); } }
@Override public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) { return new LayoutParams(getContext(), attrs); }
/** * Remove all child views. */ private void removeCardViews() { for (int i = 0; i < getChildCount(); i++) { removeViewAt(i); i--; } }
public void run() { setScrollState(SCROLL_STATE_IDLE); populate(); } };
@Override public void onInvalidated() { dataSetChanged(); } }
public CardPager(Context context, AttributeSet attrs) { super(context, attrs); initCardPager(); }
void setCurrentItemInternal(int item, boolean smoothScroll, boolean always) { setCurrentItemInternal(item, smoothScroll, always, 0); }
@Override protected ViewGroup.LayoutParams generateDefaultLayoutParams() { return new LayoutParams(); }
@Override protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) { return generateDefaultLayoutParams(); }
private void requestParentDisallowInterceptTouchEvent(boolean disallowIntercept) { final ViewParent parent = getParent(); if (parent != null) { parent.requestDisallowInterceptTouchEvent(disallowIntercept); } }
ItemInfo infoForAnyChild(View child) { ViewParent parent; while ((parent = child.getParent()) != this) { if (parent == null || !(parent instanceof View)) { return null; } child = (View) parent; } return infoForChild(child); }
@Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { super.onScrollChanged(l, t, oldl, oldt); if (l == getClientWidth() * currentItem) { virtualPos = 0; } }
@Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); // Make sure scroll position is set correctly. if (w != oldw) { recomputeScrollPosition(w, oldw, 0, 0); } }
@Override protected void onDetachedFromWindow() { removeCallbacks(endScrollRunnable); super.onDetachedFromWindow(); }
void populate() { populate(currentItem); }
@Override public void onChanged() { dataSetChanged(); }
public CardPager(Context context) { super(context); initCardPager(); }