2014-09-05 5 views
7

In unserem Projekt verwenden wir Google Maps v2, und ich muss eine Möglichkeit finden, PIN-Symbol zu ändern, nachdem der Pin angezapft wurde. Außerdem muss ich das Initialsymbol für diesen Pin zurückgeben, wenn ein weiterer Pin abgegriffen wird. So, jetzt haben wir etwas wie folgt aus:Wie ändere ich das Markersymbol, was es angezapft wurde?

public ClusterManager.OnClusterItemClickListener<OurClusterItem> mClusterItemClickListener = new ClusterManager.OnClusterItemClickListener<OurClusterItem>() { 

    @Override 
    public boolean onClusterItemClick(OurClusterItem item) { 
     // Some actions here 
     return true; 
    } 
}; 

und dann setzen wir diese Zuhörer zur Karte:

ClusterManager mClusterManager = new ClusterManager<OurClusterItem>(getActivity(), getMap()); 
mClusterManager.setOnClusterItemClickListener(mClusterItemClickListener); 
googleMap.setOnMarkerClickListener(mClusterManager); 

kann jemand bieten Lösung für dieses also? Danke!

Antwort

12

Also habe ich eine Lösung dafür gefunden - vielleicht hilft das auch jemandem.

Zuerst müssen wir unseren benutzerdefinierten Renderer verwenden (geerbt von DefaultClusterRenderer). DefaultClusterRenderer seinen eigenen Cache hat, die Paare von ClusterItem und entsprechenden Marker enthält:

public MarkerCache<T> mMarkerCache = new MarkerCache<T>(); 

so dass ich die nächste Methode in unserem CustomClusterRenderer

public Marker getMarker(OurClusterItem clusterItem) { 
    return mMarkerCache.get(clusterItem); 
} 

Nachdem er schrieb, habe ich zu unserem Fragment 2 Variablen hinzugefügt:

private Marker mCurrentSelectedMarker; 
private ClusterStore mCurrentSelectedClusterItem; 

und Änderung Implementierung für ClusterItemClickListener:

public ClusterManager.OnClusterItemClickListener<OurClusterItem> mClusterItemClickListener = new ClusterManager.OnClusterItemClickListener<OurClusterItem>() { 

    @Override 
    public boolean onClusterItemClick(ClusterStore item) { 
     // return to previous marker non-selected icon 
     if (mCurrentSelectedMarker != null) { 
      mCurrentSelectedMarker.setIcon(BitmapDescriptorFactory.fromResource(mCurrentSelectedClusterItem.getIconResourceId())); 
     } 
     Marker marker = mCustomRenderer.getMarker(item); 
     if (marker != null) { 
      mCurrentSelectedMarker = marker; 
      mCurrentSelectedClusterItem = item; 
      marker.setIcon(BitmapDescriptorFactory.fromResource(item.getIconSelResourceId())); 
     } 
     // some other code 
     return true; 
    } 
}; 

Das ist alles, und es funktioniert wie ein Charme.

+0

Ich habe nicht Ihre Antwort verwendet, aber es gab mir einen Weg, um mein Problem zu lösen, thx – MiguelHincapieC

+0

Dank Kerl arbeitet für mich. Allerdings habe ich MarkerCache nicht verwendet. –

Verwandte Themen