[android] - rework MarkerView update mechanism (#7581)

This commit is contained in:
Tobrun
2017-01-05 16:58:41 +01:00
committed by GitHub
parent 20615a2c15
commit e71d9ac2d4
2 changed files with 18 additions and 5 deletions

View File

@@ -70,10 +70,20 @@ public class MarkerViewManager implements MapView.OnMapChangedListener {
}
}
/**
* Called to enable or disable MarkerView management.
*
* @param enabled true if management should be enabled
*/
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
/**
* Called with true to wait for the next render invocation.
*
* @param waitingForRenderInvoke true if waiting for next render event
*/
public void setWaitingForRenderInvoke(boolean waitingForRenderInvoke) {
isWaitingForRenderInvoke = waitingForRenderInvoke;
}
@@ -155,7 +165,7 @@ public class MarkerViewManager implements MapView.OnMapChangedListener {
* {@link MarkerView} will be animated to visible using alpha animation.
* </p>
*/
public void update() {
public void updateMarkerViewsPosition() {
for (final MarkerView marker : markerViewMap.keySet()) {
final View convertView = markerViewMap.get(marker);
if (convertView != null) {
@@ -421,10 +431,11 @@ public class MarkerViewManager implements MapView.OnMapChangedListener {
* once each 250 ms.
* </p>
*/
public void scheduleViewMarkerInvalidation() {
public void update() {
if (enabled) {
long currentTime = SystemClock.elapsedRealtime();
if (currentTime < updateTime) {
updateMarkerViewsPosition();
return;
}
invalidateViewMarkersInVisibleRegion();
@@ -509,7 +520,7 @@ public class MarkerViewManager implements MapView.OnMapChangedListener {
// trigger update to make newly added ViewMarker visible,
// these would only be updated when the map is moved.
update();
updateMarkerViewsPosition();
}
/**

View File

@@ -66,7 +66,7 @@ class AnnotationManager {
}
void update() {
markerViewManager.scheduleViewMarkerInvalidation();
markerViewManager.update();
infoWindowManager.update();
}
@@ -226,6 +226,7 @@ class AnnotationManager {
if (onMarkerViewAddedListener != null) {
markerViewManager.addOnMarkerViewAddedListener(marker, onMarkerViewAddedListener);
}
markerViewManager.setEnabled(true);
markerViewManager.setWaitingForRenderInvoke(true);
return marker;
}
@@ -248,7 +249,8 @@ class AnnotationManager {
annotations.put(id, marker);
markers.add(marker);
}
markerViewManager.invalidateViewMarkersInVisibleRegion();
markerViewManager.setEnabled(true);
markerViewManager.update();
return markers;
}