private boolean motionZoom(MotionEvent event) { switch (event.getActionMasked()) { case MotionEvent.ACTION_MOVE: if (m_status == STA_ZOOM) { float dx = event.getX(0) - event.getX(1); float dy = event.getY(0) - event.getY(1); m_zoom_dis2 = Global.sqrtf(dx * dx + dy * dy); float scale = m_zoom_scale * m_zoom_dis2 / m_zoom_dis1; if (m_scale / scale > 1.0001 || m_scale / scale < 0.999) { m_scale = scale; vLayout(); vSetPos(m_zoom_pos, (int) m_holdx, (int) m_holdy); } } break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_POINTER_UP: case MotionEvent.ACTION_CANCEL: if (m_status == STA_ZOOM) { m_status = STA_NONE; float dx = event.getX(0) - event.getX(1); float dy = event.getY(0) - event.getY(1); m_zoom_dis2 = Global.sqrtf(dx * dx + dy * dy); float scale = m_zoom_scale * m_zoom_dis2 / m_zoom_dis1; if (m_scale / scale > 1.0001 || m_scale / scale < 0.999) { m_scale = scale; vLayout(); vSetPos(m_zoom_pos, (int) m_holdx, (int) m_holdy); } if (m_listener != null) { m_listener.OnPDFInvalidate(false); m_listener.OnPDFZoomEnd(); } vOnZoomEnd(); } break; } return true; }