(Google Maps Android Marker群集实用程序)片段暂停时未删除群集项目

时间:2015-02-27 20:16:34

标签: android google-maps android-maps-utils

我正在尝试实施Google Maps Android Marker Clustering Utility。我遇到的问题是在最大缩放时重叠ClusterItems。我的解决方案是:通过扩展DefaultClusterRenderer创建自定义渲染器。然后在最大缩放时阻止聚类,然后在最大缩放时允许ClusterItems可拖动(否则禁止拖动)。

       @Override
       protected void onBeforeClusterItemRendered(MarkerList.Markers markers, MarkerOptions markerOptions) {

            mImageView.setImageBitmap(getImage(markers));
            Bitmap icon = mIconGenerator.makeIcon();
            markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon)).title(markers.getEntity().getPostType());

            //allow user to drag overlapping ClusterItems to inspect individually
            if(MAX_CAMERA_ZOOM <= cameraZoom){
                markerOptions.draggable(true);
            }else{
                markerOptions.draggable(false);
            }
        }

        @Override
        protected boolean shouldRenderAsCluster(Cluster cluster) {

            //Never render clusters at max zoom
            if (MAX_CAMERA_ZOOM <= cameraZoom ) {
                return false;
            } else {
                return cluster.getSize() > 2;
            }
        }

这将在我的手机上工作一段时间,然后群集停止并且拖动的ClusterItems变为永久性,以便显示的ClusterItems数量增加(同一项目的许多副本在地图上)。新拖动的ClusterItems不可点击,因此我认为它们只是未被删除的图标。任何人都可以帮我找到解决方案吗?我猜我需要在拖动后以编程方式删除拖动的图标。虽然任何解决我的问题的建议都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

好吧,问题似乎是由于MapFragment被暂停而渲染器没有删除Map上的额外ClusterItems。所以在onPause中调用map.clear似乎已经修复了额外的ClusterItems的问题。

@Override
public void onPause() {

    //Clear lost ClusterItems
    if (mMap != null) {
        mMap.clear();
    }

    if (mGoogleApiClient.isConnected()) {
        mGoogleApiClient.disconnect();
    }

    super.onPause();
    mMapView.onPause();
}

这有效,但我不确定为什么这些项目会丢失,我猜这个问题与暂停MapFragment而不是拖动ClusterItem有关,因此我会更改标题以反映这一点。