Ejemplo n.º 1
0
 public boolean onInterceptTouchEvent(MotionEvent ev) {
   final int action = ev.getAction();
   switch (action) {
     case MotionEvent.ACTION_DOWN:
       mLastY = ev.getY();
       mDragging = false;
       View view = mCallback.getChildAtPosition(ev);
       if (view instanceof SwipeableItemView) {
         mCurrView = (SwipeableItemView) view;
       } else {
         // If the touched item is not a swipeable one, clean the cache in
         // mCurrView to make sure nothing will be swiped for this action
         mCurrView = null;
       }
       mVelocityTracker.clear();
       if (mCurrView != null) {
         mCurrAnimView = mCurrView.getSwipeableView().getView();
         mCanCurrViewBeDimissed = mCallback.canChildBeDismissed(mCurrView);
         mVelocityTracker.addMovement(ev);
         mInitialTouchPosX = ev.getX();
         mInitialTouchPosY = ev.getY();
       }
       mCallback.cancelDismissCounter();
       break;
     case MotionEvent.ACTION_MOVE:
       if (mCurrView != null) {
         // Check the movement direction.
         if (mLastY >= 0 && !mDragging) {
           float currY = ev.getY();
           float currX = ev.getX();
           float deltaY = Math.abs(currY - mInitialTouchPosY);
           float deltaX = Math.abs(currX - mInitialTouchPosX);
           if (deltaY > mCurrView.getMinAllowScrollDistance() && deltaY > (FACTOR * deltaX)) {
             mLastY = ev.getY();
             mCallback.onScroll();
             return false;
           }
         }
         mVelocityTracker.addMovement(ev);
         float pos = ev.getX();
         float delta = pos - mInitialTouchPosX;
         if (Math.abs(delta) > mPagingTouchSlop) {
           mCallback.onBeginDrag(mCurrView.getSwipeableView().getView());
           mPrevView = mCallback.getLastSwipedItem();
           mDragging = true;
           mInitialTouchPosX = ev.getX() - mCurrAnimView.getTranslationX();
           mInitialTouchPosY = ev.getY();
         }
       }
       mLastY = ev.getY();
       break;
     case MotionEvent.ACTION_UP:
     case MotionEvent.ACTION_CANCEL:
       mDragging = false;
       mCurrView = null;
       mCurrAnimView = null;
       mLastY = -1;
       break;
   }
   return mDragging;
 }