[android] #3276 - introduced separate methods for GL markers versus View markers
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
@@ -864,6 +862,58 @@ public class MapboxMap {
|
||||
return markers;
|
||||
}
|
||||
|
||||
/**
|
||||
* <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.
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user