Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.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_Google Maps Markers_Google Maps Android Api 2_Android Maps Utils - Fatal编程技术网

使用群集时如何禁用android地图标记单击自动中心?

使用群集时如何禁用android地图标记单击自动中心?,android,google-maps,google-maps-markers,google-maps-android-api-2,android-maps-utils,Android,Google Maps,Google Maps Markers,Google Maps Android Api 2,Android Maps Utils,我知道我可以避免在点击标记时使用以下方法使相机居中: mGoogleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { marker.showInfoWindow(); return true; } }); 然而,我的问题是,现在我想使用集群,

我知道我可以避免在点击标记时使用以下方法使相机居中:

mGoogleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
    @Override
    public boolean onMarkerClick(Marker marker) {
        marker.showInfoWindow();
        return true;
    }
});
然而,我的问题是,现在我想使用集群,当然我想在标记(实际上是项目或集群)被录制时看到信息窗口。但我不知道在这种情况下如何调用showInfoWindow之类的东西。 在这段代码中,如果我返回false,我会看到info窗口,但是map是居中的。如果返回true,则地图不居中,但信息窗口不显示:

    mClusterManager.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener<HotspotMarker>() {
        @Override
        public boolean onClusterItemClick(HotspotMarker item) {
            Log.e(LOG_TAG, "---OnClusterItemClick");
            return false;
        }
    });

    mClusterManager.setOnClusterItemInfoWindowClickListener(new ClusterManager.OnClusterItemInfoWindowClickListener<HotspotMarker>() {
        @Override
        public void onClusterItemInfoWindowClick(HotspotMarker hotspotMarker) {
            Log.e(LOG_TAG, "---onClusterItemInfoWindowClick");
            HotspotDetailActivity.hotspot = hotspotMarker.getHotspot();
            Intent intent = new Intent(getActivity(), HotspotDetailActivity.class);
            startActivity(intent);
        }
    });

    mClusterManager.setOnClusterClickListener(new ClusterManager.OnClusterClickListener<HotspotMarker>() {
        @Override
        public boolean onClusterClick(Cluster<HotspotMarker> cluster) {
            Log.e(LOG_TAG, "---OnClusterClickListener");
            return false;
        }
    });

    mClusterManager.setOnClusterInfoWindowClickListener(new ClusterManager.OnClusterInfoWindowClickListener<HotspotMarker>() {
        @Override
        public void onClusterInfoWindowClick(Cluster<HotspotMarker> cluster) {
            Log.e(LOG_TAG, "---onClusterInfoWindowClick");
            ArrayList<HotspotMarker> markers = new ArrayList<>(cluster.getItems());
            ClusterListActivity.markers = markers;
            Intent detailHotspot = new Intent(getActivity(), ClusterListActivity.class);
            startActivity(detailHotspot);
        }
    });
mClusterManager.setOnClusterItemClickListener(新的ClusterManager.OnClusterItemClickListener(){
@凌驾
公共布尔onClusterItemClick(热点标记项){
Log.e(Log_标签,“--OnClusterItemClick”);
返回false;
}
});
mClusterManager.setOnClusterItemInfo窗口ClickListener(新建ClusterManager.OnClusterItemInfo窗口ClickListener()){
@凌驾
public void OnClusterItemInfo窗口单击(热点标记热点标记){
Log.e(Log_标记,“--onClusterItemInfo窗口单击”);
HotspotDetailActivity.hotspot=hotspotMarker.getHotspot();
Intent Intent=new Intent(getActivity(),HotspotDetailActivity.class);
星触觉(意向);
}
});
mClusterManager.setOnClusterClickListener(新的ClusterManager.OnClusterClickListener(){
@凌驾
公共布尔onClusterClick(集群){
Log.e(Log_标签,“--OnClusterClickListener”);
返回false;
}
});
mClusterManager.setOnClusterInfoWindowClickListener(新的ClusterManager.OnClusterInfoWindowClickListener(){
@凌驾
public void onClusterInfoWindowClick(群集){
Log.e(Log_标记“--onClusterInfoWindowClick”);
ArrayList markers=新的ArrayList(cluster.getItems());
ClusterListActivity.markers=标记;
Intent detailHotspot=新的Intent(getActivity(),ClusterListActivity.class);
星触觉(热点);
}
});
当我使用聚类的同时显示信息窗口时,你知道如何避免将地图居中吗?提前谢谢

编辑: 使用@skywall suggestion,我找到了一种更好的使用自定义渲染器的方法:

mClusterManager.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener<HotspotMarker>() {
            @Override
            public boolean onClusterItemClick(HotspotMarker item) {
                Marker marker=mClusteringRenderer.getMarker(item);
                marker.showInfoWindow();
                return true;
            }
        });

    mClusterManager.setOnClusterItemInfoWindowClickListener(new ClusterManager.OnClusterItemInfoWindowClickListener<HotspotMarker>() {
        @Override
        public void onClusterItemInfoWindowClick(HotspotMarker hotspotMarker) {
            HotspotDetailActivity.hotspot = hotspotMarker.getHotspot();
            Intent intent = new Intent(getActivity(), HotspotDetailActivity.class);
            startActivity(intent);
        }
    });

    mClusterManager.setOnClusterClickListener(new ClusterManager.OnClusterClickListener<HotspotMarker>() {
        @Override
        public boolean onClusterClick(Cluster<HotspotMarker> cluster) {
            Marker marker=mClusteringRenderer.getMarker(cluster);
            marker.showInfoWindow();
            return true;
        }
    });

    mClusterManager.setOnClusterInfoWindowClickListener(new ClusterManager.OnClusterInfoWindowClickListener<HotspotMarker>() {
        @Override
        public void onClusterInfoWindowClick(Cluster<HotspotMarker> cluster) {
            ArrayList<HotspotMarker> markers = new ArrayList<>(cluster.getItems());
            ClusterListActivity.markers = markers;
            Intent detailHotspot = new Intent(getActivity(), ClusterListActivity.class);
            startActivity(detailHotspot);
        }
    });
mClusterManager.setOnClusterItemClickListener(新的ClusterManager.OnClusterItemClickListener(){
@凌驾
公共布尔onClusterItemClick(热点标记项){
Marker Marker=mclusteringrender.getMarker(项目);
marker.showInfoWindow();
返回true;
}
});
mClusterManager.setOnClusterItemInfo窗口ClickListener(新建ClusterManager.OnClusterItemInfo窗口ClickListener()){
@凌驾
public void OnClusterItemInfo窗口单击(热点标记热点标记){
HotspotDetailActivity.hotspot=hotspotMarker.getHotspot();
Intent Intent=new Intent(getActivity(),HotspotDetailActivity.class);
星触觉(意向);
}
});
mClusterManager.setOnClusterClickListener(新的ClusterManager.OnClusterClickListener(){
@凌驾
公共布尔onClusterClick(集群){
Marker Marker=mclusteringrender.getMarker(集群);
marker.showInfoWindow();
返回true;
}
});
mClusterManager.setOnClusterInfoWindowClickListener(新的ClusterManager.OnClusterInfoWindowClickListener(){
@凌驾
public void onClusterInfoWindowClick(群集){
ArrayList markers=新的ArrayList(cluster.getItems());
ClusterListActivity.markers=标记;
Intent detailHotspot=新的Intent(getActivity(),ClusterListActivity.class);
星触觉(热点);
}
});

不要直接通过
mGoogleMap.setOnMarkerClickListener()
设置
GoogleMap.OnMarkerClickListener()的新实例

相反,将
mClusterManager
设置为单击处理程序,如下所示:

mGoogleMap.setOnMarkerClickListener(mClusterManager);
和处理点击:

mClusterManager.setOnClusterItemClickListener();
mClusterManager.setOnClusterClickListener();
默认情况下,信息窗口在第一次点击时显示

编辑:我现在明白了问题所在。我创建了一个不太漂亮的解决方案,但它很有效。通过以下方式修改您的单击侦听器:

mClusterManager.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener<MyClusterItem>() {
        @Override
        public boolean onClusterItemClick(MyClusterItem item) {
            for (Marker marker : mClusterManager.getMarkerCollection().getMarkers()) {
                if (marker.getPosition().latitude == item.getPosition().latitude && 
                    marker.getPosition().longitude == item.getPosition().longitude) {
                    marker.showInfoWindow();
                }
            }
            return true;
        }
    });
mClusterManager.setOnClusterItemClickListener(新的ClusterManager.OnClusterItemClickListener(){
@凌驾
公共布尔onClusterItemClick(MyClusterItem项){
对于(标记:mClusterManager.getMarkerCollection().getMarkers()){
if(marker.getPosition().latitude==item.getPosition().latitude&&
marker.getPosition().longitude==item.getPosition().longitude){
marker.showInfoWindow();
}
}
返回true;
}
});

我不能禁用,但我可以在下面移动地图(在我的情况下需要,因为屏幕的上半部分被一些抽屉覆盖)


}
返回true
对于
setOnClusterItemClickListener
我想在添加集群后,我现在就是这样配置映射的。第二段代码也有:mGoogleMap.setOnMarkerClickListener(mClusterManager);mGoogleMap.setOnInfoWindowClickListener(mClusterManager);那么,我怎样才能避免居中呢?谢谢。谢谢@skywall,请参阅我在问题中添加的评论。不幸的是,这似乎是不可能的。我只是尝试了一些事情,比如为
mClusterManager
重写
onMarkerClick()
,但是没有办法阻止它居中。默认代码是
返回这个.getMarkerManager().onMarkerClick(marker),如果没有以这种方式调用它,单击事件将不起作用。很好的解决方案。我预计,谷歌地图集群和集群项目的标记,但我没有想到它在任天堂
public View getInfoContents(Marker marker) {
    .....
    bottomBarButton1.postDelayed(new Runnable() {
        @Override
        public void run() {
            final CameraPosition cp=map.getCameraPosition();
            final Point mappoint = map.getProjection().toScreenLocation(new LatLng(cp.target.latitude, cp.target.longitude));
            mappoint.set(mappoint.x, (int) (dispHeight*0.1f));
            map.animateCamera(CameraUpdateFactory.newLatLng(map.getProjection().fromScreenLocation(mappoint)), null);
        }
    },500);
    .....