diff options
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main')
3 files changed, 74 insertions, 20 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/BaseMarkerViewOptions.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/BaseMarkerViewOptions.java index 6212aade93..ab6504c636 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/BaseMarkerViewOptions.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/BaseMarkerViewOptions.java @@ -3,15 +3,17 @@ package com.mapbox.mapboxsdk.annotations; import android.graphics.Point; import android.graphics.PointF; import android.os.Parcelable; +import android.support.annotation.AnimatorRes; +import android.support.annotation.NonNull; import com.mapbox.mapboxsdk.geometry.LatLng; /** - * Abstract builder class for composing custom Marker objects. - * + * Abstract builder class for composing custom MarkerView objects. + * <p> * Extending this class requires implementing Parceable interface. * - * @param <U> Type of the marker to be composed + * @param <U> Type of the marker view to be composed * @param <T> Type of the builder to be used for composing a custom Marker */ public abstract class BaseMarkerViewOptions<U extends MarkerView, T extends BaseMarkerViewOptions<U, T>> implements Parcelable { @@ -31,7 +33,7 @@ public abstract class BaseMarkerViewOptions<U extends MarkerView, T extends Base infoWindowOffset = new Point(); } - public T position(LatLng position) { + public T position(@NonNull LatLng position) { this.position = position; return getThis(); } @@ -66,12 +68,12 @@ public abstract class BaseMarkerViewOptions<U extends MarkerView, T extends Base return getThis(); } - public T selectAnimRes(int selectAnimRes) { + public T selectAnimatorResource(@AnimatorRes int selectAnimRes) { this.selectAnimRes = selectAnimRes; return getThis(); } - public T deselectAnimRes(int deselectAnimRes) { + public T deselectAnimatorResource(@AnimatorRes int deselectAnimRes) { this.deselectAnimRes = deselectAnimRes; return getThis(); } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewOptions.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewOptions.java index f8aaf95bb2..437bba80da 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewOptions.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewOptions.java @@ -24,8 +24,8 @@ public class MarkerViewOptions extends BaseMarkerViewOptions<MarkerView, MarkerV flat(in.readByte() != 0); centerOffset((PointF) in.readParcelable(PointF.class.getClassLoader())); infoWindowOffset((Point) in.readParcelable(Point.class.getClassLoader())); - selectAnimRes(in.readInt()); - deselectAnimRes(in.readInt()); + selectAnimatorResource(in.readInt()); + deselectAnimatorResource(in.readInt()); if (in.readByte() != 0) { // this means we have an icon String iconId = in.readString(); diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java index c04dbc0e32..da5d5b63b7 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java @@ -804,10 +804,8 @@ public class MapboxMap { */ @UiThread @NonNull - public Marker addMarker(@NonNull BaseMarkerViewOptions markerOptions) { - Marker marker = markerOptions.getMarker(); - Icon icon = IconFactory.recreate("markerViewSettings", mViewMarkerBitmap); - marker.setIcon(icon); + public Marker addMarkerView(@NonNull BaseMarkerViewOptions markerOptions) { + Marker marker = prepareViewMarker(markerOptions); long id = mMapView.addMarker(marker); marker.setMapboxMap(this); marker.setId(id); @@ -866,6 +864,58 @@ public class MapboxMap { /** * <p> + * Adds multiple markers to this map. + * </p> + * The marker's icon is rendered on the map at the location {@code Marker.position}. + * If {@code Marker.title} is defined, the map shows an info box with the marker's title and snippet. + * + * @param markerOptionsList A list of marker options objects that defines how to render the markers. + * @return A list of the {@code Marker}s that were added to the map. + */ + @UiThread + @NonNull + public List<Marker> addMarkerViews(@NonNull List<? extends BaseMarkerViewOptions> markerOptionsList) { + int count = markerOptionsList.size(); + List<Marker> markers = new ArrayList<>(count); + if (count > 0) { + BaseMarkerViewOptions markerOptions; + Marker marker; + for (int i = 0; i < count; i++) { + markerOptions = markerOptionsList.get(i); + marker = markerOptions.getMarker(); + Icon icon = IconFactory.recreate("markerViewSettings", mViewMarkerBitmap); + marker.setIcon(icon); + markers.add(marker); + } + + if (markers.size() > 0) { + long[] ids = mMapView.addMarkers(markers); + + // if unittests or markers are correctly added to map + if (ids == null || ids.length == markers.size()) { + long id = 0; + Marker m; + for (int i = 0; i < markers.size(); i++) { + m = markers.get(i); + m.setMapboxMap(this); + if (ids != null) { + id = ids[i]; + } else { + //unit test + id++; + } + m.setId(id); + mAnnotations.put(id, m); + } + } + } + } + invalidateViewMarkersInBounds(); + return markers; + } + + /** + * <p> * Updates a marker on this map. Does nothing if the marker is already added. * </p> * @@ -1352,20 +1402,22 @@ public class MapboxMap { private Marker prepareMarker(BaseMarkerOptions markerOptions) { Marker marker = markerOptions.getMarker(); - if (marker instanceof MarkerView) { - Icon icon = IconFactory.recreate("markerViewSettings", mViewMarkerBitmap); - marker.setIcon(icon); - } else { - Icon icon = mMapView.loadIconForMarker(marker); - marker.setTopOffsetPixels(mMapView.getTopOffsetPixelsForIcon(icon)); - } + Icon icon = mMapView.loadIconForMarker(marker); + marker.setTopOffsetPixels(mMapView.getTopOffsetPixelsForIcon(icon)); + return marker; + } + + private Marker prepareViewMarker(BaseMarkerViewOptions markerViewOptions) { + Marker marker = markerViewOptions.getMarker(); + Icon icon = IconFactory.recreate("markerViewSettings", mViewMarkerBitmap); + marker.setIcon(icon); return marker; } public void addMarkerViewAdapter(@Nullable MarkerViewAdapter markerViewAdapter) { if (!mMarkerViewAdapters.contains(markerViewAdapter)) { mMarkerViewAdapters.add(markerViewAdapter); - mMapView.invalidateViewMarkers(); + invalidateViewMarkersInBounds(); } } |