code: private void switchIfNecessary() {
          if (mHoverDrawable == null || mAdapter == null) {
              return;
          }
  
          int position = getPositionForId(mMobileItemId);
          long aboveItemId = position - 1 - mWrapper.getHeaderViewsCount() >= 0 ? mAdapter.getItemId(position - 1 - mWrapper.getHeaderViewsCount()) : INVALID_ID;
          long belowItemId = position + 1 - mWrapper.getHeaderViewsCount() < mAdapter.getCount()
                             ? mAdapter.getItemId(position + 1 - mWrapper.getHeaderViewsCount())
                             : INVALID_ID;
  
          final long switchId = mHoverDrawable.isMovingUpwards() ? aboveItemId : belowItemId;
          View switchView = getViewForId(switchId);
  
          final int deltaY = mHoverDrawable.getDeltaY();
          if (switchView != null && Math.abs(deltaY) > mHoverDrawable.getIntrinsicHeight()) {
              switchViews(switchView, switchId, mHoverDrawable.getIntrinsicHeight() * (deltaY < 0 ? -1 : 1));
          }
  
          mScrollHandler.handleMobileCellScroll();
  
          mWrapper.getListView().invalidate();
      }
docs: Finds the {@code View} that is a candidate for switching, and executes the switch if necessary.