Frequently Asked Question
Avoid page change during navigation while zoomed
Last Updated a year 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); } }