code: public void startDrag(ViewHolder viewHolder) {
          if (!mCallback.hasDragFlag(mRecyclerView, viewHolder)) {
              Log.e(TAG, "Start drag has been called but dragging is not enabled");
              return;
          }
          if (viewHolder.itemView.getParent() != mRecyclerView) {
              Log.e(TAG, "Start drag has been called with a view holder which is not a child of "
                      + "the RecyclerView which is controlled by this ItemTouchHelper.");
              return;
          }
          obtainVelocityTracker();
          mDx = mDy = 0f;
          select(viewHolder, ACTION_STATE_DRAG);
      }
docs: Starts dragging the provided ViewHolder. By default, ItemTouchHelper starts a drag when a
  View is long pressed. You can disable that behavior by overriding {@link
  ItemTouchHelper.Callback#isLongPressDragEnabled()}.
  <p>
  For this method to work:
  <ul>
  <li>The provided ViewHolder must be a child of the RecyclerView to which this
  ItemTouchHelper is attached.</li>
  <li>{@link ItemTouchHelper.Callback} must have dragging enabled.</li>
  <li>There must be a previous touch event that was reported to the ItemTouchHelper
  through RecyclerView's ItemTouchListener mechanism. As long as no other ItemTouchListener
  grabs previous events, this should work as expected.</li>
  </ul>
  <p>
  For example, if you would like to let your user to be able to drag an Item by touching one of
  its descendants, you may implement it as follows:
  <pre>
  viewHolder.dragButton.setOnTouchListener(new View.OnTouchListener() {
  public boolean onTouch(View v, MotionEvent event) {
  if (MotionEvent.getActionMasked(event) == MotionEvent.ACTION_DOWN) {
  mItemTouchHelper.startDrag(viewHolder);
  }
  return false;
  }
  });
  </pre>
  <p>
  
  @param viewHolder The ViewHolder to start dragging. It must be a direct child of
  RecyclerView.
  @see ItemTouchHelper.Callback#isItemViewSwipeEnabled()