From 2033d756c22eacde289316774bc71305c533dcb3 Mon Sep 17 00:00:00 2001 From: Ivo van Dongen Date: Thu, 16 Jun 2016 14:30:34 +0200 Subject: [android] Dynamic update of InfowWindow with InfoWindowAdapter example Fixes #5353 --- .../mapbox/mapboxsdk/annotations/InfoWindow.java | 11 +- .../com/mapbox/mapboxsdk/annotations/Marker.java | 5 + .../src/main/AndroidManifest.xml | 8 + .../DynamicInfoWindowAdapterActivity.java | 169 +++++++++++++++++++++ .../layout/activity_infowindow_adapter_dynamic.xml | 24 +++ .../src/main/res/values/strings.xml | 2 + 6 files changed, 218 insertions(+), 1 deletion(-) create mode 100644 platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/infowindow/DynamicInfoWindowAdapterActivity.java create mode 100644 platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_infowindow_adapter_dynamic.xml diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java index aaa5525b4d..9af459e8a0 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java @@ -259,11 +259,20 @@ public class InfoWindow { View view = mView.get(); if (mapboxMap != null && marker != null && view != null) { mCoordinates = mapboxMap.getProjection().toScreenLocation(marker.getPosition()); - view.setX(mCoordinates.x + mViewWidthOffset - mMarkerWidthOffset); + + if (view instanceof InfoWindowView) { + view.setX(mCoordinates.x + mViewWidthOffset - mMarkerWidthOffset); + } else { + view.setX(mCoordinates.x - (view.getMeasuredWidth() / 2) - mMarkerWidthOffset); + } view.setY(mCoordinates.y + mMarkerHeightOffset); } } + public View getView() { + return mView != null ? mView.get() : null; + } + boolean isVisible() { return mIsVisible; } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Marker.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Marker.java index 2d4ec4257e..d24f020a18 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Marker.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Marker.java @@ -117,6 +117,11 @@ public class Marker extends Annotation { refreshInfoWindowContent(); } + @Nullable + public InfoWindow getInfoWindow() { + return infoWindow; + } + /** * Update only for default Marker's InfoWindow content for Title and Snippet */ diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml index 7268b7d551..c3bd231d30 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml @@ -41,6 +41,14 @@ android:name="@string/category" android:value="@string/category_infowindow" /> + + + + + + + + + + diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/strings.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/strings.xml index b856e7579a..2ec1b0d25d 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/strings.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/strings.xml @@ -22,6 +22,7 @@ Standard InfoWindow example Custom InfoWindow Adapter + Custom Dynamic InfoWindow Adapter Animation Types @@ -80,6 +81,7 @@ 2 maps in a view hierarchy Restart map view after temporarily leaving to another activity Use an Android SDK View as marker + Learn how to create a dynamic custom InfoWindow Concurrent Open InfoWindows Deselect Markers On Tap -- cgit v1.2.1