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);
    }
}


Loading ...