code: void moveIfNecessary(ViewHolder viewHolder) {
          if (mRecyclerView.isLayoutRequested()) {
              return;
          }
          if (mActionState != ACTION_STATE_DRAG) {
              return;
          }
          final float threshold = mCallback.getMoveThreshold(viewHolder);
          final int x = (int) (mSelectedStartX + mDx);
          final int y = (int) (mSelectedStartY + mDy);
          if (Math.abs(y - viewHolder.itemView.getTop()) < viewHolder.itemView.getHeight() * threshold
                  && Math.abs(x - viewHolder.itemView.getLeft())
                  < viewHolder.itemView.getWidth() * threshold) {
              return;
          }
          List<ViewHolder> swapTargets = findSwapTargets(viewHolder);
          if (swapTargets.size() == 0) {
              return;
          }
          // may swap.
          ViewHolder target = mCallback.chooseDropTarget(viewHolder, swapTargets, x, y);
          if (target == null) {
              mSwapTargets.clear();
              mDistances.clear();
              return;
          }
          final int toPosition = target.getAdapterPosition();
          final int fromPosition = viewHolder.getAdapterPosition();
          if (mCallback.onMove(mRecyclerView, viewHolder, target)) {
              // keep target visible
              mCallback.onMoved(mRecyclerView, viewHolder, fromPosition,
                      target, toPosition, x, y);
          }
      }
docs: Checks if we should swap w/ another view holder.