예제 #1
0
  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);
          }
        });
  }
예제 #2
0
  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);
  }
예제 #3
0
 public void setStackMargin(int margin) {
   mCardAnimator.setStackMargin(margin);
   mCardAnimator.initLayout();
 }