summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations
diff options
context:
space:
mode:
authorTobrun <tobrun.van.nuland@gmail.com>2016-12-14 22:09:30 +0100
committerGitHub <noreply@github.com>2016-12-14 22:09:30 +0100
commit05c693555606d9184f0cb7cc24129353800dd21f (patch)
tree17372a24a055f3b6a8279d434f6d0f22d3f03fd9 /platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations
parentf74de6731591ef11a75612b31f62877deb9f833c (diff)
downloadqtlocation-mapboxgl-05c693555606d9184f0cb7cc24129353800dd21f.tar.gz
[android] - add OnMarkerView add callback (#7429)
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations')
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewManager.java51
1 files changed, 50 insertions, 1 deletions
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 f462c00f98..8989bb22d7 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
@@ -6,6 +6,7 @@ import android.graphics.RectF;
import android.os.SystemClock;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import android.support.v4.util.LongSparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -13,6 +14,7 @@ import android.widget.ImageView;
import com.mapbox.mapboxsdk.R;
import com.mapbox.mapboxsdk.constants.MapboxConstants;
+import com.mapbox.mapboxsdk.maps.MapView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.utils.AnimatorUtils;
@@ -28,10 +30,11 @@ import java.util.Map;
* This class is responsible for managing a {@link MarkerView} item.
* </p>
*/
-public class MarkerViewManager {
+public class MarkerViewManager implements MapView.OnMapChangedListener {
private final ViewGroup markerViewContainer;
private final Map<MarkerView, View> markerViewMap = new HashMap<>();
+ private final LongSparseArray<OnMarkerViewAddedListener> markerViewAddedListenerMap = new LongSparseArray<>();
private final List<MapboxMap.MarkerViewAdapter> markerViewAdapters = new ArrayList<>();
// TODO refactor MapboxMap out for Projection and Transform
@@ -40,6 +43,7 @@ public class MarkerViewManager {
private long viewMarkerBoundsUpdateTime;
private MapboxMap.OnMarkerViewClickListener onMarkerViewClickListener;
+ private boolean isWaitingForRenderInvoke;
/**
* Creates an instance of MarkerViewManager.
@@ -57,6 +61,19 @@ public class MarkerViewManager {
this.mapboxMap = mapboxMap;
}
+
+ @Override
+ public void onMapChanged(@MapView.MapChange int change) {
+ if (isWaitingForRenderInvoke && change == MapView.DID_FINISH_RENDERING_FRAME_FULLY_RENDERED) {
+ isWaitingForRenderInvoke = false;
+ invalidateViewMarkersInVisibleRegion();
+ }
+ }
+
+ public void setWaitingForRenderInvoke(boolean waitingForRenderInvoke) {
+ isWaitingForRenderInvoke = waitingForRenderInvoke;
+ }
+
/**
* Animate a MarkerView to a given rotation.
* <p>
@@ -470,10 +487,21 @@ public class MarkerViewManager {
markerViewContainer.addView(adaptedView);
}
}
+
+ // notify listener is marker view is rendered
+ OnMarkerViewAddedListener onViewAddedListener = markerViewAddedListenerMap.get(marker.getId());
+ if (onViewAddedListener != null) {
+ onViewAddedListener.onViewAdded(marker);
+ markerViewAddedListenerMap.remove(marker.getId());
+ }
}
}
}
}
+
+ // clear map, don't keep references to MarkerView listeners that are not found in the bounds of the map.
+ markerViewAddedListenerMap.clear();
+
// trigger update to make newly added ViewMarker visible,
// these would only be updated when the map is moved.
update();
@@ -555,6 +583,10 @@ public class MarkerViewManager {
return markerViewContainer;
}
+ public void addOnMarkerViewAddedListener(MarkerView markerView, OnMarkerViewAddedListener onMarkerViewAddedListener) {
+ markerViewAddedListenerMap.put(markerView.getId(), onMarkerViewAddedListener);
+ }
+
/**
* Default MarkerViewAdapter used for base class of {@link MarkerView} to adapt a MarkerView to
* an ImageView.
@@ -588,4 +620,21 @@ public class MarkerViewManager {
ImageView imageView;
}
}
+
+ /**
+ * Interface definition invoked when the View of a MarkerView has been added to the map.
+ * <p>
+ * {@link MapboxMap#addMarker(BaseMarkerOptions)}
+ * and only when the related MarkerView is found in the viewport of the map.
+ * </p>
+ */
+ public interface OnMarkerViewAddedListener {
+
+ /**
+ * Invoked when the View of a MarkerView has been added to the Map.
+ *
+ * @param markerView The MarkerView the View was added for
+ */
+ void onViewAdded(@NonNull MarkerView markerView);
+ }
}