code: protected boolean computeOffset(CacheDataSet cache) {
          // offset computation: update offset for all items in the cache
          float startDataOffset = getStartingOffset((cache.getTotalSizeWithPadding()));
          float layoutOffset = getLayoutOffset();
  
          boolean inBounds = startDataOffset < -layoutOffset;
  
          for (int pos = 0; pos < cache.count(); ++pos) {
              int id = cache.getId(pos);
              if (id != -1) {
                  float endDataOffset = cache.setDataAfter(id, startDataOffset);
                  inBounds = inBounds &&
                          endDataOffset > layoutOffset &&
                          startDataOffset < -layoutOffset;
                  startDataOffset = endDataOffset;
                  Log.d(LAYOUT, TAG, "computeOffset [%d] = %f" , id, cache.getDataOffset(id));
              }
          }
  
          return inBounds;
      }
docs: Compute the offset for the item in the layout based on the offsets of neighbors
  in the layout. The other offsets are not patched. If neighbors offsets have not
  been computed the offset of the item will not be set.
  @return true if the item fits the container, false otherwise