diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewManager.java index fcb7894d1..03d554656 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewManager.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewManager.java @@ -18,6 +18,12 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +/** + * Interface for interacting with ViewMarkers objects inside of a MapView. + *
+ * This class is responsible for managing a {@link MarkerView} item. + *
+ */ public class MarkerViewManager { private Map+ * The {@link MarkerView} will be rotated from its current rotation to the given rotation. + *
+ * + * @param marker the MarkerView to rotate + * @param rotation the rotation value + */ public void animateRotation(@NonNull MarkerView marker, float rotation) { View convertView = mMarkerViewMap.get(marker); if (convertView != null) { @@ -41,6 +62,15 @@ public class MarkerViewManager { } } + /** + * Animate a MarkerView to a given alpha value. + *+ * The {@link MarkerView} will be transformed from its current alpha value to the given value. + *
+ * + * @param marker the MarkerView to change its alpha value + * @param alpha the alpha value + */ public void animateAlpha(@NonNull MarkerView marker, float alpha) { View convertView = mMarkerViewMap.get(marker); if (convertView != null) { @@ -48,6 +78,15 @@ public class MarkerViewManager { } } + /** + * Animate a MarkerVIew to be visible or invisible + *+ * The {@link MarkerView} will be made {@link View#VISIBLE} or {@link View#GONE}. + *
+ * + * @param marker the MarkerView to change its visibility + * @param visible the flag indicating if MarkerView is visible + */ public void animateVisible(@NonNull MarkerView marker, boolean visible) { View convertView = mMarkerViewMap.get(marker); if (convertView != null) { @@ -55,6 +94,14 @@ public class MarkerViewManager { } } + /** + * Updates the position of MarkerViews currently found in the viewport. + *+ * The collection of {@link MarkerView} will be iterated and each item position will be updated. + * If an item is View state is not visible and its related flag is set to visible, + * The {@link MarkerView} will be animated to visible using alpha animation. + *
+ */ public void update() { View convertView; for (MarkerView marker : mMarkerViewMap.keySet()) { @@ -63,8 +110,10 @@ public class MarkerViewManager { PointF point = mapboxMap.getProjection().toScreenLocation(marker.getPosition()); int x = (int) (marker.getAnchorU() * convertView.getMeasuredWidth()); int y = (int) (marker.getAnchorV() * convertView.getMeasuredHeight()); + marker.setOffsetX(x); marker.setOffsetY(y); + convertView.setX(point.x - x); convertView.setY(point.y - y); @@ -77,6 +126,11 @@ public class MarkerViewManager { } } + /** + * Set tilt on every non flat MarkerView currently shown in the Viewport. + * + * @param tilt the tilt value + */ public void setTilt(float tilt) { View convertView; for (MarkerView markerView : mMarkerViewMap.keySet()) { @@ -90,6 +144,15 @@ public class MarkerViewManager { } } + /** + * Animate a MarkerView to a deselected state. + *+ * The {@link MarkerView#getDeselectAnimRes()} will be called to get the related animation. + * If non are provided, no animation will be started. + *
+ * + * @param marker the MarkerView to deselect + */ public void deselect(@NonNull MarkerView marker) { final View convertView = mMarkerViewMap.get(marker); if (convertView != null) { @@ -100,6 +163,18 @@ public class MarkerViewManager { } } + /** + * Remove a MarkerView from a map. + *+ * The {@link MarkerView} will be removed using an alpha animation and related {@link View} + * will be released to the {@link android.support.v4.util.Pools.SimplePool} from the related + * {@link com.mapbox.mapboxsdk.maps.MapboxMap.MarkerViewAdapter}. It's possible to remove + * the {@link MarkerView} from the underlying collection if needed. + *
+ * + * @param marker the MarkerView to remove + * @param removeFromMap flag indicating if a MarkerView will be removed from the collection. + */ public void removeMarkerView(MarkerView marker, boolean removeFromMap) { final View viewHolder = mMarkerViewMap.get(marker); if (viewHolder != null && marker != null) { @@ -127,6 +202,11 @@ public class MarkerViewManager { } } + /** + * Add a MarkerViewAdapter. + * + * @param markerViewAdapter the MarkerViewAdapter to add + */ public void addMarkerViewAdapter(@Nullable MapboxMap.MarkerViewAdapter markerViewAdapter) { if (!markerViewAdapters.contains(markerViewAdapter)) { markerViewAdapters.add(markerViewAdapter); @@ -134,15 +214,33 @@ public class MarkerViewManager { } } - public void setOnMarkerViewClickListener(@Nullable MapboxMap.OnMarkerViewClickListener listener) { - onMarkerViewClickListener = listener; - } - + /** + * Get all MarkerViewAdapters associated with this MarkerViewManager. + * + * @return a List of MarkerViewAdapters + */ public List+ * This method is rate limited, and {@link #invalidateViewMarkersInBounds} will only be called + * once each 250 ms. + *
+ */ + public void scheduleViewMarkerInvalidation() { if (!markerViewAdapters.isEmpty()) { long currentTime = SystemClock.elapsedRealtime(); if (currentTime < mViewMarkerBoundsUpdateTime) { @@ -153,6 +251,13 @@ public class MarkerViewManager { } } + /** + * Invalidate the ViewMarkers found in the viewport. + *+ * This method will remove any markers that aren't in the viewport any more and will add new + * ones for each found Marker in the changed viewport. + *
+ */ public void invalidateViewMarkersInBounds() { Projection projection = mapboxMap.getProjection(); List