diff options
author | Antonio Zugaldia <antonio@mapbox.com> | 2015-11-24 17:35:22 -0500 |
---|---|---|
committer | Antonio Zugaldia <antonio@mapbox.com> | 2015-11-24 17:35:22 -0500 |
commit | aa018736b286f39536419716a86369def8a5009f (patch) | |
tree | 0d3811cb35cc9274ff2b504fe700c5d55088fdeb /android | |
parent | e87834f15d43981bf9aca3a82d1f31059d0fd8a7 (diff) | |
download | qtlocation-mapboxgl-aa018736b286f39536419716a86369def8a5009f.tar.gz |
still some work needed on onSingleTapConfirmed()
Diffstat (limited to 'android')
-rw-r--r-- | android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java | 2 | ||||
-rw-r--r-- | android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/MapView.java | 82 |
2 files changed, 54 insertions, 30 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 0f9668be8f..e3254e8f72 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 @@ -196,7 +196,7 @@ final class InfoWindow { } private void onClose() { - mMapView.get().deselectMarker(); + mMapView.get().deselectMarker(getBoundMarker()); } InfoWindow setBoundMarker(Marker boundMarker) { diff --git a/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/MapView.java b/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/MapView.java index 8844184142..a37d09a3a8 100644 --- a/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/MapView.java +++ b/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/MapView.java @@ -81,6 +81,7 @@ import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.Iterator; import java.util.List; /** @@ -201,7 +202,7 @@ public final class MapView extends FrameLayout { // Every annotation that has been added to the map private final List<Annotation> mAnnotations = new ArrayList<>(); private List<Marker> mMarkersNearLastTap = new ArrayList<>(); - private Marker mSelectedMarker; + private List<Marker> mSelectedMarkers = new ArrayList<>(); private InfoWindowAdapter mInfoWindowAdapter; private SpriteFactory mSpriteFactory; private ArrayList<Sprite> mSprites = new ArrayList<>(); @@ -808,7 +809,7 @@ public final class MapView extends FrameLayout { @Override public void onMapChanged(@MapChange int change) { if ((change == REGION_WILL_CHANGE) || (change == REGION_WILL_CHANGE_ANIMATED)) { - deselectMarker(); + deselectMarkers(); } if (change == DID_FINISH_LOADING_MAP) { @@ -2018,12 +2019,12 @@ public final class MapView extends FrameLayout { return; } - if (marker == mSelectedMarker) { + if (mSelectedMarkers.contains(marker)) { return; } // Need to deselect any currently selected annotation first - deselectMarker(); + deselectMarker(marker); boolean handledDefaultClick = false; if (mOnMarkerClickListener != null) { @@ -2038,20 +2039,41 @@ public final class MapView extends FrameLayout { marker.showInfoWindow(); } - mSelectedMarker = marker; + mSelectedMarkers.add(marker); } /** - * Deselects any currently selected marker. The selected marker will have it's info window closed. + * Deselects any currently selected marker. All markers will have it's info window closed. */ @UiThread - public void deselectMarker() { - if (mSelectedMarker != null) { - if (mSelectedMarker.isInfoWindowShown()) { - mSelectedMarker.hideInfoWindow(); - mSelectedMarker = null; + public void deselectMarkers() { + if (mSelectedMarkers.isEmpty()) { + return; + } + + for (Marker marker: mSelectedMarkers) { + if (marker.isInfoWindowShown()) { + marker.hideInfoWindow(); } } + + mSelectedMarkers = new ArrayList<>(); + } + + /** + * Deselects a currently selected marker. The selected marker will have it's info window closed. + */ + @UiThread + public void deselectMarker(@NonNull Marker marker) { + if (!mSelectedMarkers.contains(marker)) { + return; + } + + if (marker.isInfoWindowShown()) { + marker.hideInfoWindow(); + } + + mSelectedMarkers.remove(marker); } // @@ -2129,8 +2151,8 @@ public final class MapView extends FrameLayout { */ @UiThread @Nullable - public Marker getSelectedMarker() { - return mSelectedMarker; + public List<Marker> getSelectedMarkers() { + return mSelectedMarkers; } private void adjustTopOffsetPixels() { @@ -2144,12 +2166,12 @@ public final class MapView extends FrameLayout { } } - if (mSelectedMarker != null) { - if (mSelectedMarker.isInfoWindowShown()) { - Marker temp = mSelectedMarker; + for (Marker marker: mSelectedMarkers) { + if (marker.isInfoWindowShown()) { + Marker temp = marker; temp.hideInfoWindow(); temp.showInfoWindow(); - mSelectedMarker = temp; + marker = temp; } } } @@ -2426,19 +2448,21 @@ public final class MapView extends FrameLayout { Collections.sort(nearbyMarkers); if (nearbyMarkers == mMarkersNearLastTap) { + // TODO // the selection candidates haven't changed; cycle through them - if (mSelectedMarker != null && (mSelectedMarker.getId() == mMarkersNearLastTap.get(mMarkersNearLastTap.size() - 1).getId())) { - // the selected marker is the last in the set; cycle back to the first - // note: this could be the selected marker if only one in set - newSelectedMarkerId = mMarkersNearLastTap.get(0).getId(); - } else if (mSelectedMarker != null) { - // otherwise increment the selection through the candidates - long result = mMarkersNearLastTap.indexOf(mSelectedMarker); - newSelectedMarkerId = mMarkersNearLastTap.get((int) result + 1).getId(); - } else { +// if (mSelectedMarker != null +// && (mSelectedMarker.getId() == mMarkersNearLastTap.get(mMarkersNearLastTap.size() - 1).getId())) { +// // the selected marker is the last in the set; cycle back to the first +// // note: this could be the selected marker if only one in set +// newSelectedMarkerId = mMarkersNearLastTap.get(0).getId(); +// } else if (mSelectedMarker != null) { +// // otherwise increment the selection through the candidates +// long result = mMarkersNearLastTap.indexOf(mSelectedMarker); +// newSelectedMarkerId = mMarkersNearLastTap.get((int) result + 1).getId(); +// } else { // no current selection; select the first one newSelectedMarkerId = mMarkersNearLastTap.get(0).getId(); - } +// } } else { // start tracking a new set of nearby markers mMarkersNearLastTap = nearbyMarkers; @@ -2459,7 +2483,7 @@ public final class MapView extends FrameLayout { Annotation annotation = mAnnotations.get(i); if (annotation instanceof Marker) { if (annotation.getId() == newSelectedMarkerId) { - if (mSelectedMarker == null || annotation.getId() != mSelectedMarker.getId()) { + if (mSelectedMarkers.isEmpty() || !mSelectedMarkers.contains(annotation)) { selectMarker((Marker) annotation); } break; @@ -2469,7 +2493,7 @@ public final class MapView extends FrameLayout { } else { // deselect any selected marker - deselectMarker(); + deselectMarkers(); // notify app of map click if (mOnMapClickListener != null) { |