@@ -69,20 +69,24 @@ private void getPageColsRows(GridSize grid, int pageIndex) {
6969 grid .cols = MathUtils .ceil (1f / partWidth );
7070 }
7171
72- private Holder getPageAndCoordsByOffset (Holder holder , GridSize grid , float offset , boolean endOffset ) {
73- float fixOffset = -MathUtils .max (offset , 0 );
74- holder .page = pdfView .pdfFile .getPageAtOffset (fixOffset , pdfView .getZoom ());
72+ private Holder getPageAndCoordsByOffset (Holder holder , GridSize grid , float localXOffset ,
73+ float localYOffset , boolean endOffset ) {
74+ float fixedXOffset = -MathUtils .max (localXOffset , 0 );
75+ float fixedYOffset = -MathUtils .max (localYOffset , 0 );
76+ float offset = pdfView .isSwipeVertical () ? fixedYOffset : fixedXOffset ;
77+ holder .page = pdfView .pdfFile .getPageAtOffset (offset , pdfView .getZoom ());
7578 getPageColsRows (grid , holder .page );
7679 SizeF scaledPageSize = pdfView .pdfFile .getScaledPageSize (holder .page , pdfView .getZoom ());
7780 float rowHeight = scaledPageSize .getHeight () / grid .rows ;
7881 float colWidth = scaledPageSize .getWidth () / grid .cols ;
7982 float row , col ;
83+ float secondaryOffset = pdfView .pdfFile .getSecondaryPageOffset (holder .page , pdfView .getZoom ());
8084 if (pdfView .isSwipeVertical ()) {
81- row = Math .abs (fixOffset - pdfView .pdfFile .getPageOffset (holder .page , pdfView .getZoom ())) / rowHeight ;
82- col = xOffset / colWidth ;
85+ row = Math .abs (fixedYOffset - pdfView .pdfFile .getPageOffset (holder .page , pdfView .getZoom ())) / rowHeight ;
86+ col = MathUtils . min ( fixedXOffset - secondaryOffset , 0 ) / colWidth ;
8387 } else {
84- col = Math .abs (fixOffset - pdfView .pdfFile .getPageOffset (holder .page , pdfView .getZoom ())) / colWidth ;
85- row = yOffset / rowHeight ;
88+ col = Math .abs (fixedXOffset - pdfView .pdfFile .getPageOffset (holder .page , pdfView .getZoom ())) / colWidth ;
89+ row = MathUtils . min ( fixedYOffset - secondaryOffset , 0 ) / rowHeight ;
8690 }
8791
8892 if (endOffset ) {
@@ -104,17 +108,14 @@ private void calculatePartSize(GridSize grid) {
104108
105109 private void loadVisible () {
106110 int parts = 0 ;
107- float firstOffset , lastOffset ;
108- if (pdfView .isSwipeVertical ()) {
109- firstOffset = -yOffset ;
110- lastOffset = -yOffset - pdfView .getHeight ();
111- } else {
112- firstOffset = -xOffset ;
113- lastOffset = -xOffset - pdfView .getWidth ();
114- }
115111 float scaledPreloadOffset = preloadOffset * pdfView .getZoom ();
116- getPageAndCoordsByOffset (firstHolder , firstGrid , firstOffset + scaledPreloadOffset , false );
117- getPageAndCoordsByOffset (lastHolder , lastGrid , lastOffset - scaledPreloadOffset + 1 , true );
112+ float firstXOffset = -xOffset + scaledPreloadOffset ;
113+ float lastXOffset = -xOffset - pdfView .getWidth () - scaledPreloadOffset ;
114+ float firstYOffset = -yOffset + scaledPreloadOffset ;
115+ float lastYOffset = -yOffset - pdfView .getHeight () - scaledPreloadOffset ;
116+
117+ getPageAndCoordsByOffset (firstHolder , firstGrid , firstXOffset , firstYOffset , false );
118+ getPageAndCoordsByOffset (lastHolder , lastGrid , lastXOffset , lastYOffset , true );
118119
119120 for (int i = firstHolder .page ; i <= lastHolder .page ; i ++) {
120121 loadThumbnail (i );
@@ -127,6 +128,8 @@ private void loadVisible() {
127128 parts += loadPageEnd (firstHolder , firstGrid , CACHE_SIZE - parts );
128129 } else if (page == lastHolder .page && pagesCount > 1 ) {
129130 parts += loadPageStart (lastHolder , lastGrid , CACHE_SIZE - parts );
131+ } else if (pagesCount == 1 ) {
132+ parts += loadPageCenter (firstHolder , lastHolder , firstGrid , CACHE_SIZE - parts );
130133 } else {
131134 getPageColsRows (middleGrid , page );
132135 parts += loadWholePage (page , middleGrid , CACHE_SIZE - parts );
@@ -145,6 +148,16 @@ private int loadWholePage(int page, GridSize grid, int nbOfPartsLoadable) {
145148 return loadPage (page , 0 , grid .rows - 1 , 0 , grid .cols - 1 , nbOfPartsLoadable );
146149 }
147150
151+ /**
152+ * When only part of one page is visible
153+ *
154+ * @return loaded parts count
155+ */
156+ private int loadPageCenter (Holder firstHolder , Holder lastHolder , GridSize grid , int nbOfPartsLoadable ) {
157+ calculatePartSize (grid );
158+ return loadPage (firstHolder .page , firstHolder .row , lastHolder .row , firstHolder .col , lastHolder .col , nbOfPartsLoadable );
159+ }
160+
148161 /**
149162 * When only end of page is visible
150163 *
0 commit comments