使用标记集群的Android自定义信息窗口
我正在使用谷歌地图api对标记进行聚类。因为我想要一个自定义图标作为标记,所以我创建了一个自定义渲染器(它扩展了使用标记集群的Android自定义信息窗口,android,google-maps,Android,Google Maps,我正在使用谷歌地图api对标记进行聚类。因为我想要一个自定义图标作为标记,所以我创建了一个自定义渲染器(它扩展了DefaultClusterRenderer)。在onBeforeClusterItemRendered上,我正在设置所需的图标 问题是我现在想创建一个自定义的infowindow。如果我这样做: googleMap.setInfoWindowAdapter(new InfoWindowAdapter() { // Use default InfoWindow fra
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
中,我可以自定义信息窗口。问题是传递的参数类型为标记
。因为我在使用集群,所以我使用了一个自定义标记(MyMarker
),作为其中的信息。
我无法将Marker
转换为MyMarker
,也无法将参数更改为MyMarker
。我不想这样做来提取信息
在创建自定义信息窗口的同时,如何维护集群(在这里我可以访问MyMarker
info)
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());
}
public MarkerRenderer(){
super(getActivity()、mGoogleMap、mClusterManager);
}
@凌驾
在呈现BeforeClusterItem(MyMarker MyMarker、MarkerOptions MarkerOptions)之前受保护的空{
markerOptions.icon(BitmapDescriptorFactory.fromResource(myMarker.getMarkerImage()).title(
“这是带有默认infoWindo的自定义标记”);
}
@凌驾
在呈现群集之前受保护的void(群集群集、标记选项标记选项){
super.onBeforeClusterRendered(集群、标记选项);
markerOptions.title(“集群大小”+cluster.getSize());
}
建议在单击侦听器中存储对集群或标记的引用
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;
}
});
示例代码引用了InfoWindowAdapter,但对于MarkerRenderer也应该可以使用;您可以将自定义标记作为参数传递给构造函数
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;
}
}