Add pinch to zoom touch gestures
This commit is contained in:
parent
1f229ad9a8
commit
0ac0102a8a
@ -14,6 +14,7 @@ import android.view.Menu;
|
|||||||
import android.view.MenuInflater;
|
import android.view.MenuInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
|
import android.view.ScaleGestureDetector;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.webkit.CookieManager;
|
import android.webkit.CookieManager;
|
||||||
import android.webkit.JavascriptInterface;
|
import android.webkit.JavascriptInterface;
|
||||||
@ -254,8 +255,45 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
final ScaleGestureDetector scaleDetector = new ScaleGestureDetector(PdfViewer.this,
|
||||||
|
new ScaleGestureDetector.SimpleOnScaleGestureListener() {
|
||||||
|
// As the zoom value is discrete we listen to scaling step and not scaling ratio
|
||||||
|
float SPAN_STEP = 150;
|
||||||
|
float initialSpan;
|
||||||
|
int prevNbStep;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onScaleBegin(ScaleGestureDetector detector) {
|
||||||
|
initialSpan = detector.getCurrentSpan();
|
||||||
|
prevNbStep = 0;
|
||||||
|
return super.onScaleBegin(detector);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onScale(ScaleGestureDetector detector) {
|
||||||
|
float spanDiff = initialSpan - detector.getCurrentSpan();
|
||||||
|
int curNbStep = (int) (spanDiff/SPAN_STEP);
|
||||||
|
if (curNbStep != prevNbStep) {
|
||||||
|
int stepDiff = curNbStep - prevNbStep;
|
||||||
|
if (stepDiff > 0) {
|
||||||
|
for (int i = prevNbStep; i < curNbStep; i++) {
|
||||||
|
zoomOut();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = prevNbStep; i > curNbStep; i--) {
|
||||||
|
zoomIn();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
prevNbStep = curNbStep;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
mWebView.setOnTouchListener((view, motionEvent) -> {
|
mWebView.setOnTouchListener((view, motionEvent) -> {
|
||||||
detector.onTouchEvent(motionEvent);
|
detector.onTouchEvent(motionEvent);
|
||||||
|
scaleDetector.onTouchEvent(motionEvent);
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -340,6 +378,22 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader
|
|||||||
startActivityForResult(intent, ACTION_OPEN_DOCUMENT_REQUEST_CODE);
|
startActivityForResult(intent, ACTION_OPEN_DOCUMENT_REQUEST_CODE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void zoomIn() {
|
||||||
|
if (mZoomLevel < MAX_ZOOM_LEVEL) {
|
||||||
|
mZoomLevel++;
|
||||||
|
renderPage(true);
|
||||||
|
invalidateOptionsMenu();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void zoomOut() {
|
||||||
|
if (mZoomLevel > 0) {
|
||||||
|
mZoomLevel--;
|
||||||
|
renderPage(true);
|
||||||
|
invalidateOptionsMenu();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static void enableDisableMenuItem(MenuItem item, boolean enable) {
|
private static void enableDisableMenuItem(MenuItem item, boolean enable) {
|
||||||
if (enable) {
|
if (enable) {
|
||||||
if (!item.isEnabled()) {
|
if (!item.isEnabled()) {
|
||||||
@ -482,19 +536,11 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader
|
|||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
|
|
||||||
case R.id.action_zoom_out:
|
case R.id.action_zoom_out:
|
||||||
if (mZoomLevel > 0) {
|
zoomOut();
|
||||||
mZoomLevel--;
|
|
||||||
renderPage(true);
|
|
||||||
invalidateOptionsMenu();
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case R.id.action_zoom_in:
|
case R.id.action_zoom_in:
|
||||||
if (mZoomLevel < MAX_ZOOM_LEVEL) {
|
zoomIn();
|
||||||
mZoomLevel++;
|
|
||||||
renderPage(true);
|
|
||||||
invalidateOptionsMenu();
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case R.id.action_rotate_clockwise:
|
case R.id.action_rotate_clockwise:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user