@@ -73,6 +73,9 @@ public class AirMapMarker extends AirMapFeature {
73
73
private float calloutAnchorY ;
74
74
private boolean calloutAnchorIsSet ;
75
75
76
+ private boolean tracksViewChanges = true ;
77
+ private boolean tracksViewChangesActive = false ;
78
+
76
79
private boolean hasCustomMarkerView = false ;
77
80
78
81
private final DraweeHolder <?> logoHolder ;
@@ -240,6 +243,32 @@ public void setCalloutAnchor(double x, double y) {
240
243
update ();
241
244
}
242
245
246
+ public void setTracksViewChanges (boolean tracksViewChanges ) {
247
+ this .tracksViewChanges = tracksViewChanges ;
248
+ updateTracksViewChanges ();
249
+ }
250
+
251
+ private void updateTracksViewChanges () {
252
+ boolean shouldTrack = tracksViewChanges && hasCustomMarkerView && marker != null ;
253
+ if (shouldTrack == tracksViewChangesActive ) return ;
254
+ tracksViewChangesActive = shouldTrack ;
255
+
256
+ if (shouldTrack ) {
257
+ ViewChangesTracker .getInstance ().addMarker (this );
258
+ } else {
259
+ ViewChangesTracker .getInstance ().removeMarker (this );
260
+ }
261
+ }
262
+
263
+ public boolean updateCustomMarkerIcon () {
264
+ if (!tracksViewChangesActive )
265
+ return false ;
266
+
267
+ marker .setIcon (getIcon ());
268
+
269
+ return true ;
270
+ }
271
+
243
272
public LatLng interpolate (float fraction , LatLng a , LatLng b ) {
244
273
double lat = (b .latitude - a .latitude ) * fraction + a .latitude ;
245
274
double lng = (b .longitude - a .longitude ) * fraction + a .longitude ;
@@ -313,6 +342,7 @@ public void addView(View child, int index) {
313
342
// if children are added, it means we are rendering a custom marker
314
343
if (!(child instanceof AirMapCallout )) {
315
344
hasCustomMarkerView = true ;
345
+ updateTracksViewChanges ();
316
346
}
317
347
update ();
318
348
}
@@ -325,12 +355,14 @@ public Object getFeature() {
325
355
@ Override
326
356
public void addToMap (GoogleMap map ) {
327
357
marker = map .addMarker (getMarkerOptions ());
358
+ updateTracksViewChanges ();
328
359
}
329
360
330
361
@ Override
331
362
public void removeFromMap (GoogleMap map ) {
332
363
marker .remove ();
333
364
marker = null ;
365
+ updateTracksViewChanges ();
334
366
}
335
367
336
368
private BitmapDescriptor getIcon () {
0 commit comments