diff options
author | Tobrun <tobrun.van.nuland@gmail.com> | 2016-11-14 12:08:03 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-14 12:08:03 +0100 |
commit | f66ea0bef9071cf7c27e456e7eb9528b8cff5e30 (patch) | |
tree | 7d9e85da24481a6d0ca516179753bc1cdece0de2 /platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk | |
parent | fa6d5864177bfb68e99f8732068a3402cc5aadfd (diff) | |
download | qtlocation-mapboxgl-f66ea0bef9071cf7c27e456e7eb9528b8cff5e30.tar.gz |
[android] - getMarkerViews in rect should return in bound views (#7015)
* [android] - getMarkerViews in rectangle should only return in bound views.
* added example in test app for debugging
* Covert rectangle coming in to density dependant rectangle
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk')
2 files changed, 20 insertions, 7 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AnnotationManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AnnotationManager.java index 0eae8eb0a9..4b26be558f 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AnnotationManager.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AnnotationManager.java @@ -329,7 +329,14 @@ class AnnotationManager { return selectedMarkers; } - public List<Marker> getMarkersInRect(@NonNull RectF rect) { + public List<Marker> getMarkersInRect(@NonNull RectF rectangle) { + // convert Rectangle to be density depedent + float pixelRatio = nativeMapView.getPixelRatio(); + RectF rect = new RectF(rectangle.left / pixelRatio, + rectangle.top / pixelRatio, + rectangle.right / pixelRatio, + rectangle.bottom / pixelRatio); + long[] ids = nativeMapView.queryPointAnnotations(rect); List<Long> idsList = new ArrayList<>(ids.length); @@ -350,7 +357,13 @@ class AnnotationManager { return new ArrayList<>(annotations); } - public List<MarkerView> getMarkerViewsInRect(@NonNull RectF rect) { + public List<MarkerView> getMarkerViewsInRect(@NonNull RectF rectangle) { + float pixelRatio = nativeMapView.getPixelRatio(); + RectF rect = new RectF(rectangle.left / pixelRatio, + rectangle.top / pixelRatio, + rectangle.right / pixelRatio, + rectangle.bottom / pixelRatio); + long[] ids = nativeMapView.queryPointAnnotations(rect); List<Long> idsList = new ArrayList<>(ids.length); @@ -363,7 +376,7 @@ class AnnotationManager { int count = annotationList.size(); for (int i = 0; i < count; i++) { Annotation annotation = annotationList.get(i); - if (annotation instanceof MarkerView) { + if (annotation instanceof MarkerView && idsList.contains(annotation.getId())) { annotations.add((MarkerView) annotation); } } 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 97e86199fa..e5848f5090 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 @@ -1572,10 +1572,10 @@ public class MapView extends FrameLayout { float toleranceSides = 4 * screenDensity; float toleranceTopBottom = 10 * screenDensity; - RectF tapRect = new RectF((tapPoint.x - iconManager.getAverageIconWidth() / 2 - toleranceSides) / screenDensity, - (tapPoint.y - iconManager.getAverageIconHeight() / 2 - toleranceTopBottom) / screenDensity, - (tapPoint.x + iconManager.getAverageIconWidth() / 2 + toleranceSides) / screenDensity, - (tapPoint.y + iconManager.getAverageIconHeight() / 2 + toleranceTopBottom) / screenDensity); + RectF tapRect = new RectF(tapPoint.x - iconManager.getAverageIconWidth() / 2 - toleranceSides, + tapPoint.y - iconManager.getAverageIconHeight() / 2 - toleranceTopBottom, + tapPoint.x + iconManager.getAverageIconWidth() / 2 + toleranceSides, + tapPoint.y + iconManager.getAverageIconHeight() / 2 + toleranceTopBottom); List<Marker> nearbyMarkers = annotationManager.getMarkersInRect(tapRect); long newSelectedMarkerId = -1; |