未找到 setOnCameraIdleListener android google 地图集群

setOnCameraIdleListener not found android google map cluster

未找到 setOnCameraIdleListener() 方法 在 android google 地图集群中。

我编译了这个库:

dependencies { compile 'com.google.maps.android:android-maps-utils:0.5+'}

public class ClusteringDemoActivity extends MapsActivity {
private ClusterManager<MyItem> mClusterManager;

@Override
protected void startDemo() {
    getMap().moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(51.503186, -0.126446), 10));


    mClusterManager = new ClusterManager<MyItem>(this, getMap());



   getMap().setOnCameraIdleListener(mClusterManager);
    getMap().setOnMarkerClickListener(mClusterManager);


    addItems();
}
private void addItems() {


    double lat = 51.5145160;
    double lng = -0.1270060;


    for (int i = 0; i < 10; i++) {
        double offset = i / 60d;
        lat = lat + offset;
        lng = lng + offset;
        MyItem offsetItem = new MyItem(lat, lng);
        mClusterManager.addItem(offsetItem);
    }
}
}

`

我猜您使用的是旧版本的 google 播放服务,它不包含与 GoogleMap [=22= 相关的 setOnCameraIdleListener 方法的实现] 模型.

因此,请尝试通过放置或编辑您的 build.gradle 文件来升级您的播放服务:

编译'com.google.android.gms:play-services:11.0.1'

我通过编辑我的 build.gradle 文件解决了这个问题:

compile 'com.google.maps.android:android-maps-utils:0.5'

请试试这个

MarkerClustering.java

import android.app.Activity;
import android.util.Log;

import com.google.android.gms.maps.GoogleMap;
import com.google.maps.android.clustering.ClusterManager;

public class MarkerClustering implements GoogleMap.OnCameraIdleListener {

    private static final String TAG = MarkerClustering.class.getSimpleName();

    public MarkerClustering(Activity activity, GoogleMap googleMap) {
        try {
            ClusterManager<CustomClusterItem> clusterManager = new ClusterManager<>(activity, googleMap);

            MarkerRenderer markerRenderer = new MarkerRenderer(activity, googleMap, clusterManager, this);
            clusterManager.setRenderer(markerRenderer);

            googleMap.setOnCameraIdleListener(clusterManager);
            googleMap.setOnMarkerClickListener(clusterManager);
        } catch (Exception e) {
            Log.e(TAG, Log.getStackTraceString(e));
        }
    }

    @Override
    public void onCameraIdle() {
//        Your code
    }
}

MarkerRenderer.java

import android.content.Context;

import com.google.android.gms.maps.GoogleMap;
import com.google.maps.android.clustering.ClusterManager;
import com.google.maps.android.clustering.view.DefaultClusterRenderer;

public class MarkerRenderer extends DefaultClusterRenderer<CustomClusterItem> implements GoogleMap.OnCameraIdleListener {
    private GoogleMap.OnCameraIdleListener onCameraIdleListener;

    public MarkerRenderer(Context context, GoogleMap googleMap, ClusterManager<CustomClusterItem> clusterManager, GoogleMap.OnCameraIdleListener onCameraIdleListener) {
        super(context, googleMap, clusterManager);
        this.onCameraIdleListener = onCameraIdleListener;
    }

    @Override
    public void onCameraIdle() {
        if (onCameraIdleListener != null) {
            onCameraIdleListener.onCameraIdle();
        }
    }
}

您可以使用默认 ClusterItem。如果你想要意味着通过自定义 class 自定义它,如下所示。

CustomClusterItem.java

import com.google.android.gms.maps.model.LatLng;
import com.google.maps.android.clustering.ClusterItem;

public class CustomClusterItem implements ClusterItem {
    private final LatLng latLng;

    CustomClusterItem(LatLng latLng) {
        this.latLng = latLng;
    }

    @Override
    public LatLng getPosition() {
        return latLng;
    }
}