From ce2ffef38a65bd9ba2cc9b0794460e54d8624b36 Mon Sep 17 00:00:00 2001 From: Leith Bade Date: Thu, 13 Nov 2014 06:57:14 +1100 Subject: [PATCH] Scale map style to match screen DPI --- .../java/com/mapbox/mapboxgl/lib/MapView.java | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/android/java/lib/src/main/java/com/mapbox/mapboxgl/lib/MapView.java b/android/java/lib/src/main/java/com/mapbox/mapboxgl/lib/MapView.java index 37db7d55f..9dc5d5e3f 100644 --- a/android/java/lib/src/main/java/com/mapbox/mapboxgl/lib/MapView.java +++ b/android/java/lib/src/main/java/com/mapbox/mapboxgl/lib/MapView.java @@ -10,6 +10,7 @@ import android.graphics.PointF; import android.os.Bundle; import android.support.annotation.NonNull; import android.util.AttributeSet; +import android.util.DisplayMetrics; import android.util.Log; import android.view.GestureDetector; import android.view.InputDevice; @@ -59,6 +60,9 @@ public class MapView extends SurfaceView { // Used to load map tiles private String mAccessToken; + // Used to handle DPI scaling + private float mScreenDensity = 1.0f; + // Touch gesture detectors private GestureDetector mGestureDetector; private ScaleGestureDetector mScaleGestureDetector; @@ -115,6 +119,9 @@ public class MapView extends SurfaceView { return; } + // Get the screen's density + mScreenDensity = context.getResources().getDisplayMetrics().density; + // Get the cache path String cachePath = context.getCacheDir().getAbsolutePath(); String dataPath = context.getFilesDir().getAbsolutePath(); @@ -465,7 +472,7 @@ public class MapView extends SurfaceView { int height) { Log.v(TAG, "surfaceChanged"); Log.i(TAG, "resize " + format + " " + width + " " + height); - mNativeMapView.resize(width, height); + mNativeMapView.resize((int) (width / mScreenDensity), (int) (height / mScreenDensity), mScreenDensity, width, height); } } @@ -516,10 +523,10 @@ public class MapView extends SurfaceView { mNativeMapView.cancelTransitions(); if (zoomIn) { - mNativeMapView.scaleBy(2.0, x, y, 0.3); + mNativeMapView.scaleBy(2.0, x / mScreenDensity, y / mScreenDensity, 0.3); } else { // TODO two finger tap zoom out - mNativeMapView.scaleBy(0.5, x, y, 0.3); + mNativeMapView.scaleBy(0.5, x / mScreenDensity, y / mScreenDensity, 0.3); } } @@ -654,8 +661,8 @@ public class MapView extends SurfaceView { * * // Cancel any animation mNativeMapView.cancelTransitions(); * - * mNativeMapView.moveBy(velocityX * duration / 2.0, velocityY * - * duration / 2.0, duration); + * mNativeMapView.moveBy(velocityX * duration / 2.0 / mScreenDensity, velocityY * + * duration / 2.0 / mScreenDensity, duration); * * return true; */ @@ -675,7 +682,7 @@ public class MapView extends SurfaceView { // transitions with touch // Scroll the map - mNativeMapView.moveBy(-distanceX, -distanceY); + mNativeMapView.moveBy(-distanceX / mScreenDensity, -distanceY / mScreenDensity); return true; } } @@ -740,7 +747,7 @@ public class MapView extends SurfaceView { // Scale the map mNativeMapView.scaleBy(detector.getScaleFactor(), - detector.getFocusX(), detector.getFocusY()); + detector.getFocusX() / mScreenDensity, detector.getFocusY() / mScreenDensity); return true; } @@ -818,8 +825,8 @@ public class MapView extends SurfaceView { double bearing = mNativeMapView.getBearing(); bearing += detector.getRotationDegreesDelta() * Math.PI / 180.0; Log.d("rotate", "rotate to " + bearing); - mNativeMapView.setBearing(bearing, detector.getFocusX(), - detector.getFocusY()); + mNativeMapView.setBearing(bearing, detector.getFocusX() / mScreenDensity, + detector.getFocusY() / mScreenDensity); return true; } @@ -874,7 +881,7 @@ public class MapView extends SurfaceView { mNativeMapView.cancelTransitions(); // Move left - mNativeMapView.moveBy(scrollDist, 0.0); + mNativeMapView.moveBy(scrollDist / mScreenDensity, 0.0 / mScreenDensity); return true; case KeyEvent.KEYCODE_DPAD_RIGHT: @@ -886,7 +893,7 @@ public class MapView extends SurfaceView { mNativeMapView.cancelTransitions(); // Move right - mNativeMapView.moveBy(-scrollDist, 0.0); + mNativeMapView.moveBy(-scrollDist / mScreenDensity, 0.0 / mScreenDensity); return true; case KeyEvent.KEYCODE_DPAD_UP: @@ -898,7 +905,7 @@ public class MapView extends SurfaceView { mNativeMapView.cancelTransitions(); // Move up - mNativeMapView.moveBy(0.0, scrollDist); + mNativeMapView.moveBy(0.0 / mScreenDensity, scrollDist / mScreenDensity); return true; case KeyEvent.KEYCODE_DPAD_DOWN: @@ -910,7 +917,7 @@ public class MapView extends SurfaceView { mNativeMapView.cancelTransitions(); // Move down - mNativeMapView.moveBy(0.0, -scrollDist); + mNativeMapView.moveBy(0.0 / mScreenDensity, -scrollDist / mScreenDensity); return true; default: @@ -988,7 +995,7 @@ public class MapView extends SurfaceView { mNativeMapView.cancelTransitions(); // Scroll the map - mNativeMapView.moveBy(-10.0 * event.getX(), -10.0 * event.getY()); + mNativeMapView.moveBy(-10.0 * event.getX() / mScreenDensity, -10.0 * event.getY() / mScreenDensity); return true; // Trackball was pushed in so start tracking and tell system we are @@ -1085,8 +1092,8 @@ public class MapView extends SurfaceView { float scrollDist = event.getAxisValue(MotionEvent.AXIS_VSCROLL); // Scale the map by the appropriate power of two factor - mNativeMapView.scaleBy(Math.pow(2.0, scrollDist), event.getX(), - event.getY()); + mNativeMapView.scaleBy(Math.pow(2.0, scrollDist), event.getX() / mScreenDensity, + event.getY() / mScreenDensity); return true;