nol*_*man 31 android google-maps markerclusterer google-maps-android-api-2
我正在使用Google Maps Utility for Android,它允许在地图中创建聚类,我需要显示自定义,InfoWindow
但我找不到任何方法来执行此操作.为了显示信息窗口,我有以下类,并且在方法onClusterItemRendered
中我可以访问标记的信息:
class MyClusterRenderer extends DefaultClusterRenderer<MarkerItem> {
public MyClusterRenderer(Context context, GoogleMap map,
ClusterManager<MarkerItem> clusterManager) {
super(context, map, clusterManager);
}
@Override
protected void onBeforeClusterItemRendered(MarkerItem item,
MarkerOptions markerOptions) {
super.onBeforeClusterItemRendered(item, markerOptions);
markerOptions.title(String.valueOf(item.getMarkerId()));
}
@Override
protected void onClusterItemRendered(MarkerItem clusterItem,
Marker marker) {
super.onClusterItemRendered(clusterItem, marker);
}
}
Run Code Online (Sandbox Code Playgroud)
是否有人使用过该库并知道如何显示自定义内容,InfoWindow
例如Google地图中使用的方式?喜欢:
getMap().setInfoWindowAdapter(new InfoWindowAdapter() {
@Override
public View getInfoWindow(Marker arg0) {
return null;
}
@Override
public View getInfoContents(Marker arg0) {
return null;
}
});
Run Code Online (Sandbox Code Playgroud)
Ron*_*onR 59
是的,这可以做到.ClusterManager
保持两个MarkerManager.Collections
:
您可以InfoWindowAdapter
单独为这些标记中的每一种设置自定义.
首先,将ClusterManager的MarkerManager安装为地图的InfoWindowAdapter:
ClusterManager<MarkerItem> clusterMgr = new ClusterManager<MarkerItem>(context, map);
map.setInfoWindowAdapter(clusterMgr.getMarkerManager());
Run Code Online (Sandbox Code Playgroud)
接下来,将您的自定义安装InfoWindowAdapter
为一个或两个标记集合的适配器:
clusterMgr.getClusterMarkerCollection().setOnInfoWindowAdapter(new MyCustomAdapterForClusters());
clusterMgr.getMarkerCollection().setOnInfoWindowAdapter(new MyCustomAdapterForItems());
Run Code Online (Sandbox Code Playgroud)
最后一部分是将Marker
您在自定义InfoWindowAdapter回调中接收的原始对象映射ClusterItem
到您首先添加到地图的对象.这可以使用onClusterClick和onClusterItemClick侦听器来实现,如下所示:
map.setOnMarkerClickListener(clusterMgr);
clusterMgr.setOnClusterClickListener(new OnClusterClickListener<MarkerItem>() {
@Override
public boolean onClusterClick(Cluster<MarkerItem> cluster) {
clickedCluster = cluster; // remember for use later in the Adapter
return false;
}
});
clusterMgr.setOnClusterItemClickListener(new OnClusterItemClickListener<MarkerItem>() {
@Override
public boolean onClusterItemClick(MarkerItem item) {
clickedClusterItem = item;
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
现在,您拥有在各自的适配器中组装自定义InfoWindow内容所需的一切!例如:
class MyCustomAdapterForClusters implements InfoWindowAdapter {
@Override
public View getInfoContents(Marker marker) {
if (clickedCluster != null) {
for (MarkerItem item : clickedCluster.getItems()) {
// Extract data from each item in the cluster as needed
}
}
// build your custom view
// ...
return view;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12097 次 |
最近记录: |