summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobrun <tobrun.van.nuland@gmail.com>2016-11-21 13:15:53 +0100
committerGitHub <noreply@github.com>2016-11-21 13:15:53 +0100
commit89ddb4548cbc4e6dd2976ef8513bf7d6b6d2ec54 (patch)
tree2e439dcfc267be20fd1ef9f422558a3f47af1f60
parent2bc9610182b3421e4765f6aa48cf03540c0d27c7 (diff)
downloadqtlocation-mapboxgl-89ddb4548cbc4e6dd2976ef8513bf7d6b6d2ec54.tar.gz
[android] - delay invalidating marker views (#7075)
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java29
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/PressForMarkerActivity.java8
2 files changed, 31 insertions, 6 deletions
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 2f81519c86..8a5d46f875 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
@@ -203,6 +203,7 @@ public class MapboxMap {
* also avoids layer identifier name changes that will occur in the default style’s layers over
* time. These default styles can be found in the {@link Style} class.
* </p>
+ *
* @param layerId a String matching the layer ID found within the current map style. This
* String is case sensitive. Any references to the layer become invalid and should
* not be used anymore
@@ -1033,12 +1034,23 @@ public class MapboxMap {
@UiThread
@NonNull
public MarkerView addMarker(@NonNull BaseMarkerViewOptions markerOptions) {
+ // listen for a render event, so we can invalidate MarkerViews
+ mapView.addOnMapChangedListener(new MapView.OnMapChangedListener() {
+ @Override
+ public void onMapChanged(@MapView.MapChange int change) {
+ if (change == MapView.DID_FINISH_RENDERING_FRAME_FULLY_RENDERED) {
+ markerViewManager.invalidateViewMarkersInVisibleRegion();
+ mapView.removeOnMapChangedListener(this);
+ }
+ }
+ });
+
+ // add marker to map
MarkerView marker = prepareViewMarker(markerOptions);
marker.setMapboxMap(this);
long id = mapView.addMarker(marker);
marker.setId(id);
annotations.put(id, marker);
- markerViewManager.invalidateViewMarkersInVisibleRegion();
return marker;
}
@@ -1058,6 +1070,20 @@ public class MapboxMap {
public List<MarkerView> addMarkerViews(@NonNull List<? extends BaseMarkerViewOptions> markerViewOptions) {
List<MarkerView> markers = new ArrayList<>();
for (BaseMarkerViewOptions markerViewOption : markerViewOptions) {
+ if (markerViewOptions.indexOf(markerViewOption) == markerViewOptions.size() - 1) {
+ // only invalidate marker views with last item in list
+ // listen for a render event, so we can invalidate MarkerViews
+ mapView.addOnMapChangedListener(new MapView.OnMapChangedListener() {
+ @Override
+ public void onMapChanged(@MapView.MapChange int change) {
+ if (change == MapView.DID_FINISH_RENDERING_FRAME_FULLY_RENDERED) {
+ markerViewManager.invalidateViewMarkersInVisibleRegion();
+ mapView.removeOnMapChangedListener(this);
+ }
+ }
+ });
+ }
+ // add marker to map
MarkerView marker = prepareViewMarker(markerViewOption);
marker.setMapboxMap(this);
long id = mapView.addMarker(marker);
@@ -1065,7 +1091,6 @@ public class MapboxMap {
annotations.put(id, marker);
markers.add(marker);
}
- markerViewManager.invalidateViewMarkersInVisibleRegion();
return markers;
}
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/PressForMarkerActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/PressForMarkerActivity.java
index f5030ba649..02bafacb67 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/PressForMarkerActivity.java
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/PressForMarkerActivity.java
@@ -10,7 +10,7 @@ import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
-import com.mapbox.mapboxsdk.annotations.MarkerOptions;
+import com.mapbox.mapboxsdk.annotations.MarkerViewOptions;
import com.mapbox.mapboxsdk.geometry.LatLng;
import com.mapbox.mapboxsdk.maps.MapView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
@@ -24,7 +24,7 @@ public class PressForMarkerActivity extends AppCompatActivity {
private MapView mapView;
private MapboxMap mapboxMap;
- private ArrayList<MarkerOptions> markerList = new ArrayList<>();
+ private ArrayList<MarkerViewOptions> markerList = new ArrayList<>();
private static final DecimalFormat LAT_LON_FORMATTER = new DecimalFormat("#.#####");
@@ -60,7 +60,7 @@ public class PressForMarkerActivity extends AppCompatActivity {
String title = LAT_LON_FORMATTER.format(point.getLatitude()) + ", " + LAT_LON_FORMATTER.format(point.getLongitude());
String snippet = "X = " + (int) pixel.x + ", Y = " + (int) pixel.y;
- MarkerOptions marker = new MarkerOptions()
+ MarkerViewOptions marker = new MarkerViewOptions()
.position(point)
.title(title)
.snippet(snippet);
@@ -72,7 +72,7 @@ public class PressForMarkerActivity extends AppCompatActivity {
if (savedInstanceState != null) {
markerList = savedInstanceState.getParcelableArrayList(STATE_MARKER_LIST);
- mapboxMap.addMarkers(markerList);
+ mapboxMap.addMarkerViews(markerList);
}
}
});