Frequently Asked Question
Avoid page change during navigation while zoomed
Last Updated 11 months ago
This article illustrates how to prevent the page navigation (horizontal scroll) while the page is zoomed with the rendering mode set as single/double page.
Here you can find a class that extends PDFLayoutDual class:
/** * Block page navigation while zoomed. * * @author Nermeen created on 12/05/2017. */ public class ExtendedDualLayout extends PDFLayoutDual { private boolean mZooming; private Context mContext; public ExtendedDualLayout(Context context) { super(context); mContext = context; } @Override public void vZoomStart() { mZooming = true; super.vZoomStart(); } @Override public boolean vZoomEnd() { boolean result = super.vZoomEnd(); if(result) mZooming = false; return result; } @Override protected void do_scroll(int x, int y, int dx, int dy) { if(vGetScale() > vGetMinScale()) { int index = m_pageno; if ((Global.def_view == 6 || Global.def_view == 4) && m_w > m_h) index = (m_pageno + 1) / 2; if (index > -1 && index < m_cells.length) { int minX = m_cells[index].left; int endX = m_cells[index].right - m_w; boolean showToast = false; if (x + dx > endX) { dx = endX - x; showToast = true;} if (x + dx < minX) { dx = minX - x; showToast = true;} if(showToast) Toast.makeText(mContext, "You cannot change page while page is zoomed, Zoom out first!", Toast.LENGTH_SHORT).show(); } } super.do_scroll(x, y, dx, dy); } @Override public void vSetX(int x) { if(vGetScale() > vGetMinScale() && !mZooming) { int index = m_pageno; if ((Global.def_view == 6 || Global.def_view == 4) && m_w > m_h) index = (m_pageno + 1) / 2; if (x + vGetWidth() > m_cells[index].right) x = m_cells[index].right - vGetWidth(); if (x <= m_cells[index].left) x = m_cells[index].left; } super.vSetX(x); } }