private ItemInfo infoForCurrentScrollPosition() {
        final int height = getClientHeight();
        final float scrollOffset = height > 0 ? (float) getScrollY() / height : 0;
        final float marginOffset = height > 0 ? (float) mPageMargin / height : 0;
        int lastPos = -1;
        float lastOffset = 0.f;
        float lastHeight = 0.f;
        boolean first = true;

        ItemInfo lastItem = null;
        for (int i = 0; i < mItems.size(); i++) {
            ItemInfo ii = mItems.get(i);
            float offset;
            if (!first && ii.position != lastPos + 1) {
                // Create a synthetic item for a missing page.
                ii = mTempItem;
                ii.offset = lastOffset + lastHeight + marginOffset;
                ii.position = lastPos + 1;
                ii.heightFactor = mAdapter.getPageWidth(ii.position);
                i--;
            }
            offset = ii.offset;

            final float topBound = offset;
            final float bottomBound = offset + ii.heightFactor + marginOffset;
            if (first || scrollOffset >= topBound) {
                if (scrollOffset < bottomBound || i == mItems.size() - 1) {
                    return ii;
                }
            } else {
                return lastItem;
            }
            first = false;
            lastPos = ii.position;
            lastOffset = offset;
            lastHeight = ii.heightFactor;
            lastItem = ii;
        }

        return lastItem;
    }
private ItemInfo infoForCurrentScrollPosition ( ) { final int height = getClientHeight ( ) ; final float scrollOffset = height > 0 ? ( float ) getScrollY ( ) / height : 0 ; final float marginOffset = height > 0 ? ( float ) mPageMargin / height : 0 ; int lastPos = - 1 ; float lastOffset = 0.f ; float lastHeight = 0.f ; boolean first = true ; ItemInfo lastItem = null ; for ( int i = 0 ; i < mItems . size ( ) ; i ++ ) { ItemInfo ii = mItems . get ( i ) ; float offset ; if ( ! first && ii . position != lastPos + 1 ) { ii = mTempItem ; ii . offset = lastOffset + lastHeight + marginOffset ; ii . position = lastPos + 1 ; ii . heightFactor = mAdapter . getPageWidth ( ii . position ) ; i -- ; } offset = ii . offset ; final float topBound = offset ; final float bottomBound = offset + ii . heightFactor + marginOffset ; if ( first || scrollOffset >= topBound ) { if ( scrollOffset < bottomBound || i == mItems . size ( ) - 1 ) { return ii ; } } else { return lastItem ; } first = false ; lastPos = ii . position ; lastOffset = offset ; lastHeight = ii . heightFactor ; lastItem = ii ; } return lastItem ; }
@return Info about the page at the current scroll position.
This can be synthetic for a missing middle page; the 'object' field can be null.