package com.loopeer.cardstack; import android.view.View; public class StackScrollDelegateImpl implements ScrollDelegate{ private CardStackView mCardStackView; private int mScrollY; private int mScrollX; public StackScrollDelegateImpl(CardStackView cardStackView) { mCardStackView = cardStackView; } private void updateChildPos() { for (int i = 0; i < mCardStackView.getChildCount(); i++) { View view = mCardStackView.getChildAt(i); if (view.getTop() - mScrollY < mCardStackView.getChildAt(0).getY()) { view.setTranslationY(mCardStackView.getChildAt(0).getY() - view.getTop()); } else if (view.getTop() - mScrollY > view.getTop()) { view.setTranslationY(0); } else { view.setTranslationY(-mScrollY); } } } @Override public void scrollViewTo(int x, int y) { x = clamp(x, mCardStackView.getWidth() - mCardStackView.getPaddingRight() - mCardStackView.getPaddingLeft(), mCardStackView.getWidth()); y = clamp(y, mCardStackView.getShowHeight(), mCardStackView.getTotalLength()); mScrollY = y; mScrollX = x; updateChildPos(); } private static int clamp(int n, int my, int child) { if (my >= child || n < 0) { return 0; } if ((my + n) > child) { return child - my; } return n; } @Override public void setViewScrollY(int y) { scrollViewTo(mScrollX, y); } @Override public void setViewScrollX(int x) { scrollViewTo(x, mScrollY); } @Override public int getViewScrollY() { return mScrollY; } @Override public int getViewScrollX() { return mScrollX; } }