private void doDragFloatView(int movePos, View moveItem, boolean forceInvalidate) {
        mBlockLayoutRequests = true;

        updateFloatView();

        int oldFirstExpPos = mFirstExpPos;
        int oldSecondExpPos = mSecondExpPos;

        boolean updated = updatePositions();

        if (updated) {
            adjustAllItems();
            int scroll = adjustScroll(movePos, moveItem, oldFirstExpPos, oldSecondExpPos);
            // Log.d("mobeta", "  adjust scroll="+scroll);

            setSelectionFromTop(movePos, moveItem.getTop() + scroll - getPaddingTop());
            layoutChildren();
        }

        if (updated || forceInvalidate) {
            invalidate();
        }

        mBlockLayoutRequests = false;
    }
Start a drag of item at <code>position</code> without using
a FloatViewManager.

@param position Item to drag.
@param floatView Floating View.
@param dragFlags Flags that restrict some movements of the
floating View. For example, set <code>dragFlags |= 
~{@link #DRAG_NEG_X}</code> to allow dragging the floating
View in all directions except off the screen to the left.
@param deltaX Offset in x of the touch coordinate from the
left edge of the floating View (i.e. touch-x minus float View
left).
@param deltaY Offset in y of the touch coordinate from the
top edge of the floating View (i.e. touch-y minus float View
top).

@return True if the drag was started, false otherwise. This
<code>startDrag</code> will fail if we are not currently in
a touch event, <code>floatView</code> is null, or there is
a drag in progress.
third_party/DragSortListView/src/com/mobeta/android/dslv/DragSortListView.java