2015-09-25 75 views
1

林。獲得持續的屏幕位置一次性項目使用ItemTouchHelper創建一個可拖動和滑動式recyclerview(這裏<a href="https://github.com/iPaulPro/Android-ItemTouchHelper-Demo" rel="nofollow">https://github.com/iPaulPro/Android-ItemTouchHelper-Demo</a>詳細被拖(ItemTouchHelper)

我已經通過ItemTouchHelper和ItemTouchHelper.callback和所有的方法看上去沒有方法似乎給了我的手指或物品的實時屏幕位置,如果有人能幫助它將是一個生命保護程序!

回答

0

您還可以在ItemTouchHelper的內部OnInterceptTouchEvent方法反饋

private final RecyclerView.OnItemTouchListener mOnItemTouchListener 
     = new RecyclerView.OnItemTouchListener() { 
    @Override 
    public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent event) { 
     mGestureDetector.onTouchEvent(event); 
     if (DEBUG) { 
      Log.d(TAG, "intercept: x:" + event.getX() + ",y:" + event.getY() + ", " + event); 
     } 
     final int action = MotionEventCompat.getActionMasked(event); 
     if (action == MotionEvent.ACTION_DOWN) { 
      mActivePointerId = MotionEventCompat.getPointerId(event, 0); 
      mInitialTouchX = event.getX(); 
      mInitialTouchY = event.getY(); 
      obtainVelocityTracker(); 
      if (mSelected == null) { 
       final RecoverAnimation animation = findAnimation(event); 
       if (animation != null) { 
        mInitialTouchX -= animation.mX; 
        mInitialTouchY -= animation.mY; 
        endRecoverAnimation(animation.mViewHolder, true); 
        if (mPendingCleanup.remove(animation.mViewHolder.itemView)) { 
         mCallback.clearView(mRecyclerView, animation.mViewHolder); 
        } 
        select(animation.mViewHolder, animation.mActionState); 
        updateDxDy(event, mSelectedFlags, 0); 
       } 
      } 
     } else if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) { 
      wdwdwd 
      mActivePointerId = ACTIVE_POINTER_ID_NONE; 
      select(null, ACTION_STATE_IDLE); 
     } else if (mActivePointerId != ACTIVE_POINTER_ID_NONE) { 
      // in a non scroll orientation, if distance change is above threshold, we 
      // can select the item 
      final int index = MotionEventCompat.findPointerIndex(event, mActivePointerId); 
      if (DEBUG) { 
       Log.d(TAG, "pointer index " + index); 
      } 
      if (index >= 0) { 
       checkSelectForSwipe(action, event, index); 
      } 
     } 
     if (mVelocityTracker != null) { 
      mVelocityTracker.addMovement(event); 
     } 
     return mSelected != null; 
    } 
+0

您應該將兩個答案合併爲一個。 –

0

我最終不得不進入Recyclerview V7 jar並採取來自ItemTouchHelper的代碼並創建我自己的ItemTouchHelper版本: 我將自己的方法添加到ItemTouchHelper.Callback

 public abstract void onTouchMovement(MotionEvent touch_event, int directionFlags, int pointerIndex); 

我打電話onTouchMovement在ItemTouchHelper的updateDxDy方法:

public void updateDxDy(MotionEvent ev, int directionFlags, int pointerIndex) { 
    final float x = MotionEventCompat.getX(ev, pointerIndex); 
    final float y = MotionEventCompat.getY(ev, pointerIndex); 

    mCallback.onTouchMovement(ev, directionFlags, pointerIndex); 

現在,當過我創建一個ItemTouchHelper.Callback它配備了OnTouchMovement提供的位置在拖動/滑動

的每一個點
相關問題