2014-02-19 31 views
9

我正在使用Google Maps Android API Utility Library以便以集羣方式在地圖中顯示多個標記。 我已按照說明使其工作,以及查看庫中的示例,但我無法弄清楚單擊標記時如何顯示InfoWindow如何使用Android的Android Maps實用程序庫顯示InfoWindow

我猜getMap().setOnMarkerClickListener(mClusterManager);是一個管理onClick活動,如果註釋掉,我可以用getMap().setInfoWindowAdapter(new InfoWindowAdapter() {));但我有我的自定義標記對象沒有超越訪問。 儘管如此,如果我使用getMap().setOnMarkerClickListener(mClusterManager);,我無法找到一種方式來顯示InfoWindow當一個標記被點擊。

有沒有人有任何想法如何實現這一目標?

非常感謝!

+0

你的意思是這樣的氣球? http://stackoverflow.com/questions/3880623/how-to-show-a-balloon-above-a-marker-in-a-mapactivity-isnt-there-a-widget – Tristan

+0

http://stackoverflow.com/questions/15899619/opening-infowindow -auto-when-adding-marker-google-maps-v2-android 想想這會對你有所幫助。 – Tristan

+0

@Tristan第一個鏈接已棄用。第二個不起作用,因爲這裏的方法是'onClusterClick(集羣集羣)',當你看到MarkerItem是我的自定義對象並且沒有'showInfoWindow()'方法 – noloman

回答

23

您需要擴展DefaultClusterRenderer類並覆蓋onBeforeClusterItemRendered,將標題附加到作爲參數傳遞的MarkerOptions對象。

之後,您可以將您的實施傳遞給ClusterManager

例子:

class MyItem implements ClusterItem { 

    private LatLng mPosition; 
    private String mTitle; 

    public MyItem(LatLng position){ 
     mPosition = position; 
    } 

    @Override 
    public LatLng getPosition() { 
     return mPosition; 
    } 

    public String getTitle() { 
     return mTitle; 
    } 

    public void setTitle(String title) { 
     mTitle = title; 
    } 
} 

class MyClusterRenderer extends DefaultClusterRenderer<MyItem> { 

    public MyClusterRenderer(Context context, GoogleMap map, 
      ClusterManager<MyItem> clusterManager) { 
     super(context, map, clusterManager); 
    } 

    @Override 
    protected void onBeforeClusterItemRendered(MyItem item, MarkerOptions markerOptions) { 
     super.onBeforeClusterItemRendered(item, markerOptions); 

     markerOptions.title(item.getTitle()); 
    } 

    @Override 
    protected void onClusterItemRendered(MyItem clusterItem, Marker marker) { 
     super.onClusterItemRendered(clusterItem, marker); 

     //here you have access to the marker itself 
    } 
} 

然後你就可以以這種方式使用它:

ClusterManager<MyItem> clusterManager = new ClusterManager<MyItem>(this, getMap()); 
clusterManager.setRenderer(new MyClusterRenderer(this, getMap() ,clusterManager)); 
+1

非常感謝, 你救了我的命! – noloman

+0

有什麼方法可以定義一個自定義的'InfoWindow'來顯示,或者你只能顯示默認的? – noloman

+1

對不起,說實話我沒有嘗試過。 – rciovati

相關問題