public void discardTop(final int direction) { mCardAnimator.discard( direction, new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator arg0) { mCardAnimator.initLayout(); mIndex++; mEventListener.discarded(mIndex, direction); // mIndex = mIndex%mAdapter.getCount(); loadLast(); viewCollection.get(0).setOnTouchListener(null); viewCollection.get(viewCollection.size() - 1).setOnTouchListener(mOnTouchListener); } }); }
private void setupAnimation() { final View cardView = viewCollection.get(viewCollection.size() - 1); mCardAnimator = new CardAnimator(viewCollection, mColor); mCardAnimator.initLayout(); final DragGestureDetector dd = new DragGestureDetector( CardStack.this.getContext(), new DragGestureDetector.DragListener() { @Override public boolean onDragStart( MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { if (canSwipe) { mCardAnimator.drag(e1, e2, distanceX, distanceY); } float x1 = e1.getRawX(); float y1 = e1.getRawY(); float x2 = e2.getRawX(); float y2 = e2.getRawY(); final int direction = CardUtils.direction(x1, y1, x2, y2); float distance = CardUtils.distance(x1, y1, x2, y2); mEventListener.swipeStart(direction, distance); return true; } @Override public boolean onDragContinue( MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { float x1 = e1.getRawX(); float y1 = e1.getRawY(); float x2 = e2.getRawX(); float y2 = e2.getRawY(); final int direction = CardUtils.direction(x1, y1, x2, y2); // mEventListener.swipeContinue(direction, Math.abs(x2-x1), // Math.abs(y2-y1)); if (canSwipe) { mCardAnimator.drag(e1, e2, distanceX, distanceY); } mEventListener.swipeContinue(direction, Math.abs(x2 - x1), Math.abs(y2 - y1)); return true; } @Override public boolean onDragEnd(MotionEvent e1, MotionEvent e2) { // reverse(e1,e2); float x1 = e1.getRawX(); float y1 = e1.getRawY(); float x2 = e2.getRawX(); float y2 = e2.getRawY(); float distance = CardUtils.distance(x1, y1, x2, y2); final int direction = CardUtils.direction(x1, y1, x2, y2); boolean discard = mEventListener.swipeEnd(direction, distance); if (discard) { if (canSwipe) { mCardAnimator.discard( direction, new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator arg0) { // mIndex++; mEventListener.discarded(mIndex, direction); // mIndex = mIndex%mAdapter.getCount(); mCardAnimator.initLayout(); loadLast(); viewCollection.get(0).setOnTouchListener(null); viewCollection .get(viewCollection.size() - 1) .setOnTouchListener(mOnTouchListener); } }); } } else { if (canSwipe) { mCardAnimator.reverse(e1, e2); } } return true; } @Override public boolean onTapUp() { mEventListener.topCardTapped(); return true; } }); mOnTouchListener = new OnTouchListener() { private static final String DEBUG_TAG = "MotionEvents"; @Override public boolean onTouch(View arg0, MotionEvent event) { dd.onTouchEvent(event); return true; } }; cardView.setOnTouchListener(mOnTouchListener); }
public void setStackMargin(int margin) { mCardAnimator.setStackMargin(margin); mCardAnimator.initLayout(); }