Skip to content

Instantly share code, notes, and snippets.

@Groxx
Created April 10, 2015 18:38
Show Gist options
  • Save Groxx/57cecd0a1d2b056f025c to your computer and use it in GitHub Desktop.
Save Groxx/57cecd0a1d2b056f025c to your computer and use it in GitHub Desktop.
private class MyPanListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
mDrawingMatrix.postTranslate(distanceX, distanceY);
invalidate();
return true;
}
}
private class MyScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
@Override
public boolean onScale(final ScaleGestureDetector detector) {
final float scale = detector.getScaleFactor();
mDrawingMatrix.postScale(scale, scale, detector.getFocusX(), detector.getFocusY());
mDrawingMatrix.mapRect(outRect, bitmapSizeRect);
if (bitmapSizeRect.width() / outRect.width() > 2) {
// 2x zoomed in, start loading the next level.
// outRect shows the currently-visible region of the bitmap, can just pass to BitmapRegionDecoder
}
invalidate();
return true;
}
}
public class MyView extends View {
// or whatever
private GestureDetector scaleDetector = new GestureDetectorCompat(new MyScaleListener());
private GestureDetector panDetector = new GestureDetectorCompat(new MyPanListener());
@Override
public boolean onTouchEvent(final MotionEvent event) {
boolean result = super.onTouchEvent(event); // handles listeners, etc
result |= scaleDetector.onTouchEvent(event);
result |= panDetector.onTouchEvent(event);
return result;
}
@Override
protected void onDraw(@NotNull final Canvas canvas) {
canvas.drawBitmap(bitmap, mDrawingMatrix, mFilterBitmapPaint);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment