code: private float scrollBy(@NonNull MotionEvent event, float dx) {
          if (isSkipViewPager || isViewPagerDisabled) {
              return dx;
          }
  
          final State state = getState();
          getStateController().getMovementArea(state, tmpRectF);
  
          float pagerDx = splitPagerScroll(dx, state, tmpRectF);
          pagerDx = skipPagerMovement(pagerDx, state, tmpRectF);
          float viewDx = dx - pagerDx;
  
          // Applying pager scroll
          boolean shouldFixViewX = isViewPagerInterceptedScroll && viewPagerX == 0;
          int actualX = performViewPagerScroll(event, pagerDx);
          viewPagerX += actualX;
          if (shouldFixViewX) { // Adding back scroll not handled by ViewPager
              viewDx += Math.round(pagerDx) - actualX;
          }
  
          // Returning altered scroll left for image
          return viewDx;
      }
docs: /*
  Scrolls ViewPager if view reached bounds. Returns distance at which view can be actually
  scrolled. Here we will split given distance (dX) into movement of ViewPager and movement
  of view itself.