Google Maps Android 无集群/DeCluster 放大/缩小

问题描述

我已经在我的应用程序的 iOS 版本上实施了 Google Maps Clustering,并且运行良好。我现在正在尝试使用 android 地图实用程序库在 Android 版本上实现聚类,但在放大或缩小时它不是去聚类/聚类。

这里是集群项类:

public class MyClusterItem implements ClusterItem {

    private final LatLng position;
    private final BitmapDescriptor icon;
    private final String tag;

    public MyClusterItem(double lat,double lng,BitmapDescriptor icon,String tag) {
        this.position = new LatLng(lat,lng);
        this.icon = icon;
        this.tag = tag;
    }
    @Override
    public LatLng getPosition() {
        return position;
    }

    @Override
    public String getTitle() {
        return null;
    }

    @Override
    public String getSnippet() {
        return null;
    }

    public BitmapDescriptor getIcon() {
        return icon;
    }

    public String getTag() {
        return tag;
    }
}

以下是集群管理器的实现方式:

public void onMapReady(GoogleMap googleMap) {
        //Log.i ( TAG,"Google Map Ready Callback" );
        mMap = googleMap;
        //mMap.setonMarkerClickListener(this);
        // Point the map's listeners at the listeners implemented by the cluster
        // manager.
        mMap.setonCameraIdleListener(mClusterManager);
        mMap.getUiSettings().setMapToolbarEnabled(false);
        mMap.getUiSettings().setMyLocationButtonEnabled(false);
        mMap.getUiSettings().setRotateGesturesEnabled(false);
        if (ActivityCompat.checkSelfPermission(MapsActivity.this,Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && isLocationEnabled) {
            mMap.setMyLocationEnabled(true);
        }
        float mCurrentZoom = googleMap.getCameraPosition().zoom;
        // Initialize the manager with the context and the map.
        // (Activity extends context,so we can pass 'this' in the constructor.)
        mClusterManager = new ClusterManager<MyClusterItem>(this,mMap);
        mClusterManager.setonClusterItemClickListener(mClusterItemClickListener);
        mMap.setonMarkerClickListener(mClusterManager);
        mClusterManager.setonClusterClickListener(new ClusterManager.OnClusterClickListener<MyClusterItem>() {
            @Override
            public boolean onClusterClick(final Cluster<MyClusterItem> cluster) {
                mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(
                        cluster.getPosition(),(float) Math.floor(mMap
                                .getCameraPosition().zoom + 1)),300,null);
                return true;
            }
        });
    }

集群项是从 Firebase 数据库添加的,如下所示:

markerRef.addChildEventListener(new ChildEventListener() {
   @Override
   public void onChildAdded(@NonNull DataSnapshot dataSnapshot,@Nullable String s) {
      try {
         tableCount = tableCount+1;
         markerKey = dataSnapshot.getKey();
         markerData = dataSnapshot.getValue(Markers.class);
         MyClusterItem markerItem = new PicNickClusterItem(markerData.y,markerData.x,BitmapDescriptorFactory.fromresource(R.drawable.verified),markerKey);
         mClusterItemmap.put(markerKey,markerItem);
         mClusterManager.addItem(markerItem);
         if(tableCount >= numTables) {
            //cluster markers
            mClusterManager.cluster();
         }
      } catch (Error error) {
         noFirebaseAccessAlert();
      }
   }
}

初始地图截图:

enter image description here

缩小时的截图:

enter image description here

放大时的截图:

enter image description here

在缩小/放大时集群项目没有被集群/去集群并且没有动画。当我缩小时,我希望集群项目移动到集群中,当我放大集群项目时,我会像在应用程序的 iOS 版本中那样从集群中分离出来。此外,当我点击集群标记时,地图会放大,但集群不会扩展为集群项目。没有一个集群项具有相同的纬度/经度并且相距很远。

在 iOS 版本中,我能够设置算法(基于非分层距离)和几个用于聚类的“存储桶”(并为每个存储桶指定自定义图标)。我需要让两个版本的外观和响应都相同,以便用户在 iOS 和 Android 设备上获得相同的体验。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...