我使用google maps api聚类标记。由于我想将自定义图标作为标记,因此我创建了一个自定义渲染器(扩展了DefaultClusterRenderer
)。在onBeforeClusterItemRendered
我设置了所需的图标。
问题是我现在想要创建自定义infowindow
。如果我这样做:
googleMap.setInfoWindowAdapter(new InfoWindowAdapter() {
// Use default InfoWindow frame
@Override
public View getInfoWindow(Marker arg0) {
return null;
}
// Defines the contents of the InfoWindow
@Override
public View getInfoContents(Marker arg0) {
}
});
在getInfoContents
我可以自定义信息窗口。问题是传递的参数类型为Marker
。因为我正在使用群集,所以我使用自定义标记(MyMarker
)作为信息。
我无法将Marker
投射到MyMarker
,也无法将参数更改为MyMarker
。我不想这样做来提取信息。
我如何仍然维护群集(此处我可以访问MyMarker
信息)但是创建自定义信息窗口?
public MarkerRenderer() {
super(getActivity(), mGoogleMap, mClusterManager);
}
@Override
protected void onBeforeClusterItemRendered(MyMarker myMarker, MarkerOptions markerOptions) {
markerOptions.icon(BitmapDescriptorFactory.fromResource(myMarker.getMarkerImage())).title(
"This is my custom marker with the default infoWindo");
}
@Override
protected void onBeforeClusterRendered(Cluster<MyMarker> cluster, MarkerOptions markerOptions) {
super.onBeforeClusterRendered(cluster, markerOptions);
markerOptions.title("cluster size " + cluster.getSize());
}
答案 0 :(得分:0)
This answer建议在点击监听器中存储对群集或标记的引用。
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;
}
});
然后您可以在适配器中使用该引用。
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;
}
}
示例代码引用InfoWindowAdapter,但它也适用于MarkerRenderer;您可以将自定义标记作为参数传递给构造函数。