Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用标记集群的Android自定义信息窗口_Android_Google Maps - Fatal编程技术网

使用标记集群的Android自定义信息窗口

使用标记集群的Android自定义信息窗口,android,google-maps,Android,Google Maps,我正在使用谷歌地图api对标记进行聚类。因为我想要一个自定义图标作为标记,所以我创建了一个自定义渲染器(它扩展了DefaultClusterRenderer)。在onBeforeClusterItemRendered上,我正在设置所需的图标 问题是我现在想创建一个自定义的infowindow。如果我这样做: googleMap.setInfoWindowAdapter(new InfoWindowAdapter() { // Use default InfoWindow fra

我正在使用谷歌地图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
中,我可以自定义信息窗口。问题是传递的参数类型为
标记
。因为我在使用集群,所以我使用了一个自定义标记(
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;
}
}