diff options
author | Tobrun <tobrun.van.nuland@gmail.com> | 2015-11-25 10:33:15 +0000 |
---|---|---|
committer | Tobrun <tobrun.van.nuland@gmail.com> | 2015-11-25 10:33:15 +0000 |
commit | 936d1c01b28b1edd3961a2fb15a99562fe7af029 (patch) | |
tree | fb4905fbe3a7d926fe68fdd2cd4cbf00b30e71e9 /android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations | |
parent | aa018736b286f39536419716a86369def8a5009f (diff) | |
download | qtlocation-mapboxgl-936d1c01b28b1edd3961a2fb15a99562fe7af029.tar.gz |
[android] #3121 Allow InfoWindow to be open while panning, allow standard InfoWindow (without repositioning InfoWindowTipView) to be panned above the map
Diffstat (limited to 'android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations')
-rw-r--r-- | android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java | 34 | ||||
-rw-r--r-- | android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Marker.java | 11 |
2 files changed, 30 insertions, 15 deletions
diff --git a/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java b/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java index e3254e8f72..c9ca2acb52 100644 --- a/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java +++ b/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java @@ -18,10 +18,11 @@ import java.lang.ref.WeakReference; /** * A tooltip view */ -final class InfoWindow { +public class InfoWindow { private WeakReference<Marker> mBoundMarker; private WeakReference<MapView> mMapView; + private float mMarkerHeightOffset; private boolean mIsVisible; protected View mView; @@ -82,6 +83,7 @@ final class InfoWindow { */ InfoWindow open(Marker boundMarker, LatLng position, int offsetX, int offsetY) { setBoundMarker(boundMarker); + mMarkerHeightOffset = offsetY; MapView.LayoutParams lp = new MapView.LayoutParams(MapView.LayoutParams.WRAP_CONTENT, MapView.LayoutParams.WRAP_CONTENT); mView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); @@ -89,19 +91,20 @@ final class InfoWindow { // Calculate default Android x,y coordinate PointF coords = mMapView.get().toScreenLocation(position); float x = coords.x - (mView.getMeasuredWidth() / 2) + offsetX; - float y = coords.y - mView.getMeasuredHeight() + offsetY; - - // get right/left popup window - float rightSideInfowWindow = x + mView.getMeasuredWidth(); - float leftSideInfoWindow = x; - - // get right/left map view - final float mapRight = mMapView.get().getRight(); - final float mapLeft = mMapView.get().getLeft(); + float y = coords.y - mView.getMeasuredHeight() + mMarkerHeightOffset; if (mView instanceof InfoWindowView) { // only apply repositioning/margin for InfoWindowView Resources resources = mMapView.get().getContext().getResources(); + + // get right/left popup window + float rightSideInfowWindow = x + mView.getMeasuredWidth(); + float leftSideInfoWindow = x; + + // get right/left map view + final float mapRight = mMapView.get().getRight(); + final float mapLeft = mMapView.get().getLeft(); + float marginHorizontal = resources.getDimension(R.dimen.infowindow_margin); float tipViewOffset = resources.getDimension(R.dimen.infowindow_tipview_width) / 2; float tipViewMarginLeft = mView.getMeasuredWidth() / 2 - tipViewOffset; @@ -226,4 +229,15 @@ final class InfoWindow { .getIdentifier("id/infowindow_subdescription", null, packageName); mImageId = context.getResources().getIdentifier("id/infowindow_image", null, packageName); } + + public void update() { + MapView mapView = mMapView.get(); + Marker marker = mBoundMarker.get(); + if (mapView != null && marker != null) { + PointF pointF = mapView.toScreenLocation(marker.getPosition()); + mView.setX(pointF.x - mView.getWidth() / 2); + mView.setY(pointF.y - mView.getHeight() + mMarkerHeightOffset); + } + } + } diff --git a/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Marker.java b/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Marker.java index 4f43f9bfa2..ed8e0d98e4 100644 --- a/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Marker.java +++ b/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Marker.java @@ -79,9 +79,9 @@ public final class Marker extends Annotation { /** * Do not use this method. Used internally by the SDK. */ - public void showInfoWindow() { + public InfoWindow showInfoWindow() { if (getMapView() == null) { - return; + return null; } MapView.InfoWindowAdapter infoWindowAdapter = getMapView().getInfoWindowAdapter(); @@ -91,17 +91,18 @@ public final class Marker extends Annotation { if (content != null) { infoWindow = new InfoWindow(content, getMapView()); showInfoWindow(infoWindow); - return; + return infoWindow; } } getInfoWindow().adaptDefaultMarker(this); - showInfoWindow(getInfoWindow()); + return showInfoWindow(getInfoWindow()); } - private void showInfoWindow(InfoWindow iw) { + private InfoWindow showInfoWindow(InfoWindow iw) { iw.open(this, getPosition(), 0, topOffsetPixels); infoWindowShown = true; + return iw; } private InfoWindow getInfoWindow() { |