1

Я обнаружил, что есть способ изменить ClusterItem визуализации параметров, настройки их таким образом:ClusterManager несколько стилей для ClusterItems маркеров Google Maps v2 утилитами

clusterManager.setRenderer(new OwnIconRendered(getApplicationContext(), getMap(), clusterManager)); 

OwnIconRendered должен расширяющие DefaultClusterRenderer.

Но, он меняет все маркеры в одном стиле. Мне нужны разные варианты стилей для разных ClusterItems. Я попытался добавить маркеры в коллекцию clusterManager вручную, но тогда кластеризация не работает.

MarkerManager.Collection markerCollection = mClusterManager.getMarkerCollection(); 
for(MyMarker marker: markerList){ 
markerCollection.addMarker(getMarkerOptions(latLng, marker.getLabel(), marker.getType())); 
} 

ответ

1

Я понял это. Кластеризация с разными значками отлично работает. Во-первых, мне пришлось добавить некоторые поля в мой класс ClusterMarker, который реализует ClusterItem.

public class ClusterMarker implements ClusterItem { 
private final LatLng latLng; 
private MyMarker myMarker; 

... 
public void setMyMarker(MyMarker myMarker) { 
    this.myMarker = myMarker; 
} 
} 

Класс MyMarker содержит информацию о маркерах стилей, тильте и идентификаторах.

Позже в коде, я просто добавить маркеры к экземпляру ClusterManager таким образом:

mClusterManager.addItem(clusterMarker); 

В OwnIconRendered класса я перекрытая onBeforeClusterItemRendered метода, где весь маркер укладка происходит и в onClusterItemRendered метода я добавил тег к маркеров, поэтому позже я мог идентифицировать маркеры на карте при нажатии события.

public class OwnIconRendered extends DefaultClusterRenderer<ClusterMarker> { 
... 
cunstructor 
... 

@Override 
protected void onBeforeClusterItemRendered(ClusterMarker item, MarkerOptions markerOptions) { 

    MyMarker myMarker = item.getMyMarker(); 

    markerOptions.icon(myMarker.getIcon()); 
    markerOptions.title(myMarker.getLabel()); 
    markerOptions.anchor(0.5f, 1); 
    super.onBeforeClusterItemRendered(item, markerOptions); 
} 

@Override 
protected void onClusterItemRendered(ClusterMarker clusterMarker, Marker marker) { 
    marker.setTag(clusterMarker.getPlaceMarker().getItemId()); 
    super.onClusterItemRendered(clusterMarker, marker); 
    clusterMarkerMap.put(marker, clusterMarker); 
} 
} 
+0

Идеальное решение –

 Смежные вопросы

  • Нет связанных вопросов^_^