diff options
author | Tobrun <tobrun.van.nuland@gmail.com> | 2016-11-21 13:15:53 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-21 13:15:53 +0100 |
commit | 89ddb4548cbc4e6dd2976ef8513bf7d6b6d2ec54 (patch) | |
tree | 2e439dcfc267be20fd1ef9f422558a3f47af1f60 | |
parent | 2bc9610182b3421e4765f6aa48cf03540c0d27c7 (diff) | |
download | qtlocation-mapboxgl-89ddb4548cbc4e6dd2976ef8513bf7d6b6d2ec54.tar.gz |
[android] - delay invalidating marker views (#7075)
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); } } }); |