2014-09-05 14 views
7

W naszym projekcie używamy google maps v2, i muszę znaleźć sposób na zmianę ikony pinezki po kliknięciu pinezki. Muszę też zwrócić ikonę początkową dla tej pinezki, gdy zostanie naciśnięty inny pin. Więc teraz mamy coś takiego:Jak zmienić ikonę znacznika, która została dotknięta?

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

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

a następnie ustawić tę słuchacza do mapy:

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

tak, to może ktoś oferta rozwiązanie tego problemu? Dzięki!

Odpowiedz

12

Tak więc znalazłem rozwiązanie - może to również pomoże komuś.

Na początku musimy użyć naszego niestandardowego mechanizmu renderowania (odziedziczonego po DefaultClusterRenderer). DefaultClusterRenderer ma własną pamięć podręczną zawierającą pary ClusterItem i odpowiadające Marker:

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

więc napisałem następną metodę w naszym CustomClusterRenderer

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

po nim, dodałem do naszych fragment 2 zmiennych:

private Marker mCurrentSelectedMarker; 
private ClusterStore mCurrentSelectedClusterItem; 

i zmiana realizacja dla 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; 
    } 
}; 

To wszystko i działa jak urok.

+0

Nie skorzystałem z Twojej odpowiedzi, ale dało mi sposób na rozwiązanie mojego problemu, thx there – MiguelHincapieC

+0

Dzięki, że pracujesz dla mnie. Jednak nie używałem MarkerCache. –

Powiązane problemy