code: public boolean fling(float velocityX, float velocityY, float velocityZ) {
          boolean scrolled = true;
          float viewportX  = mScrollable.getViewPortWidth();
          if (Float.isNaN(viewportX)) {
              viewportX = 0;
          }
          float maxX = Math.min(MAX_SCROLLING_DISTANCE,
                  viewportX * MAX_VIEWPORT_LENGTHS);
  
          float viewportY  = mScrollable.getViewPortHeight();
          if (Float.isNaN(viewportY)) {
              viewportY = 0;
          }
          float maxY = Math.min(MAX_SCROLLING_DISTANCE,
                  viewportY * MAX_VIEWPORT_LENGTHS);
  
          float xOffset = (maxX * velocityX)/VELOCITY_MAX;
          float yOffset = (maxY * velocityY)/VELOCITY_MAX;
  
          Log.d(Log.SUBSYSTEM.LAYOUT, TAG, "fling() velocity = [%f, %f, %f] offset = [%f, %f]",
                  velocityX, velocityY, velocityZ,
                  xOffset, yOffset);
  
          if (equal(xOffset, 0)) {
              xOffset = Float.NaN;
          }
  
          if (equal(yOffset, 0)) {
              yOffset = Float.NaN;
          }
  
  // TODO: Think about Z-scrolling
          mScrollable.scrollByOffset(xOffset, yOffset, Float.NaN, mInternalScrollListener);
  
          return scrolled;
      }
docs: Fling the content
  
  @param velocityX The initial velocity in the X direction. Positive numbers mean that the
  finger/cursor is moving to the left on the screen, which means we want to
  scroll towards the beginning.
  @param velocityY The initial velocity in the Y direction. Positive numbers mean that the
  finger/cursor is moving down the screen, which means we want to scroll
  towards the top.
  @param velocityZ TODO: Z-scrolling is currently not supported
  @return