From 034246e00af154bdfe777e9b59ddb4703f2b1e89 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Tue, 17 May 2016 09:54:04 +0200 Subject: [PATCH] [android] #5034 - LatLngBounds Camera update not taking map padding in account [android] #5034 - padding not being included in getVisibleBounds --- .../mapbox/mapboxsdk/camera/CameraUpdateFactory.java | 10 ++++++++-- .../main/java/com/mapbox/mapboxsdk/maps/MapView.java | 8 ++++++++ .../java/com/mapbox/mapboxsdk/maps/Projection.java | 4 ++-- .../testapp/activity/camera/LatLngBoundsActivity.java | 8 +++++--- 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraUpdateFactory.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraUpdateFactory.java index 8ba0b4e5c..028d077a0 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraUpdateFactory.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraUpdateFactory.java @@ -226,7 +226,14 @@ public final class CameraUpdateFactory { // Get required objects Projection projection = mapboxMap.getProjection(); UiSettings uiSettings = mapboxMap.getUiSettings(); - RectF padding = getPadding(); + + // calculate correct padding + int[] mapPadding = mapboxMap.getPadding(); + RectF latLngPadding = getPadding(); + RectF padding = new RectF(latLngPadding.left + mapPadding[0], + latLngPadding.top + mapPadding[1], + latLngPadding.right + mapPadding[2], + latLngPadding.bottom + mapPadding[3]); // Calculate the bounds of the possibly rotated shape with respect to the viewport PointF nePixel = new PointF(-Float.MAX_VALUE, -Float.MAX_VALUE); @@ -244,7 +251,6 @@ public final class CameraUpdateFactory { float width = nePixel.x - swPixel.x; float height = nePixel.y - swPixel.y; - double zoom = 0; float minScale = 1; // Calculate the zoom level diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java index 2370af505..9ec4a9018 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java @@ -672,6 +672,14 @@ public class MapView extends FrameLayout { return mContentPaddingBottom; } + int getContentWidth(){ + return getWidth() - mContentPaddingLeft - mContentPaddingRight; + } + + int getContentHeight(){ + return getHeight() - mContentPaddingBottom - mContentPaddingTop; + } + // // Zoom // diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Projection.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Projection.java index 9482b1a2f..1605a8c65 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Projection.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Projection.java @@ -57,8 +57,8 @@ public class Projection { public VisibleRegion getVisibleRegion() { LatLngBounds.Builder builder = new LatLngBounds.Builder(); - int viewportWidth = mMapView.getWidth(); - int viewportHeight = mMapView.getHeight(); + int viewportWidth = mMapView.getContentWidth(); + int viewportHeight = mMapView.getContentHeight(); LatLng topLeft = fromScreenLocation(new PointF(0, 0)); LatLng topRight = fromScreenLocation(new PointF(viewportWidth, 0)); diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/camera/LatLngBoundsActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/camera/LatLngBoundsActivity.java index fa4bf46d0..b9a438b7d 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/camera/LatLngBoundsActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/camera/LatLngBoundsActivity.java @@ -68,10 +68,12 @@ public class LatLngBoundsActivity extends AppCompatActivity { .include(LOS_ANGELES) .build(); - // And padding - int padding = (int) getResources().getDimension(R.dimen.coordinatebounds_margin); + // Add map padding + int mapPadding = (int) getResources().getDimension(R.dimen.fab_margin); + mapboxMap.setPadding(mapPadding, mapPadding, mapPadding, mapPadding); - // Move camera to the bounds with padding + // Move camera to the bounds with added padding + int padding = (int) getResources().getDimension(R.dimen.coordinatebounds_margin); mapboxMap.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, padding)); // Call mapboxMap.getProjection().getVisibleRegion().latLngBounds to retrieve the bounds