code: public void fakeDragBy(float yOffset) {
          if (!mFakeDragging) {
              throw new IllegalStateException("No fake drag in progress. Call beginFakeDrag first.");
          }
  
          mLastMotionY += yOffset;
  
          float oldScrollY = getScrollY();
          float scrollY = oldScrollY - yOffset;
          final int height = getClientHeight();
  
          float topBound = height * mFirstOffset;
          float bottomBound = height * mLastOffset;
  
          final ItemInfo firstItem = mItems.get(0);
          final ItemInfo lastItem = mItems.get(mItems.size() - 1);
          if (firstItem.position != 0) {
              topBound = firstItem.offset * height;
          }
          if (lastItem.position != mAdapter.getCount() - 1) {
              bottomBound = lastItem.offset * height;
          }
  
          if (scrollY < topBound) {
              scrollY = topBound;
          } else if (scrollY > bottomBound) {
              scrollY = bottomBound;
          }
          // Don't lose the rounded component
          mLastMotionY += scrollY - (int) scrollY;
          scrollTo(getScrollX(), (int) scrollY);
          pageScrolled((int) scrollY);
  
          // Synthesize an event for the VelocityTracker.
          final long time = SystemClock.uptimeMillis();
          final MotionEvent ev = MotionEvent.obtain(mFakeDragBeginTime, time, MotionEvent.ACTION_MOVE,
                  0, mLastMotionY, 0);
          mVelocityTracker.addMovement(ev);
          ev.recycle();
      }
docs: Fake drag by an offset in pixels. You must have called {@link #beginFakeDrag()} first.
  
  @param yOffset Offset in pixels to drag by.
  @see #beginFakeDrag()
  @see #endFakeDrag()