GoogleMap onCameraIdle事件未触发

Sla*_*neR 5 android google-maps

我正在尝试在Google地图上对标记进行聚类,因为地图上的标记太多(大约6000多个标记)。

因此,我在Google上搜索并找到了一些有关标记聚类的文档,并将其应用于我的源代码,但是标记未显示在Google Map中。

FragMap片段的部分源代码。

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    SupportMapFragment map = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.display_map);
    if (map == null) {
        Log.e(Tag, "Google Map fragment(id: display_map) is null reference!");
        return;
    }

    map.getMapAsync(this);
}

@Override
public void onMapReady(GoogleMap googleMap) {
    if (DataPackage.getEQMarkerManager() == null) {
        if (!DataPackage.initializeEQMarkerManager(getActivity(), googleMap)) {
            Log.w(Tag, "EQMarkerManager initialization failure");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

以及EQMarkerManager其实现GoogleMap.OnCameraIdleListener接口的部分源代码。

public EQMarkerManager(Context ctx, GoogleMap map) {
    // ...
    clusterManager = new ClusterManager<>(ctx, map);
    clusterManager.setRenderer(new EQRenderer<>(ctx, map, clusterManager));

    map.setOnCameraIdleListener(this);

    clusterManager.addItems(markers);
}

@Override
public void onCameraIdle() {
    Log.d(Tag, "onCameraIdle");
}
Run Code Online (Sandbox Code Playgroud)

但是onCameraIdle从未调用过回调。为什么OnCameraIdle事件没有触发?

摇篮:

compile 'com.google.android.gms:play-services-maps:9.8.0'
compile 'com.google.maps.android:android-maps-utils:0.4.4+'
Run Code Online (Sandbox Code Playgroud)

在棉花糖设备(SDK 23版)上测试。

添加+gradle编译是什么意思?

Sla*_*neR 5

“onCameraIdle”事件未触发,因为我在另一个类上调用了“setOnCameraIdleListener”。

我的问题的源代码

碎片映射:

@Override
public void onMapReady(GoogleMap googleMap) {
    if (DataPackage.getEQMarkerManager() == null) {
        if (!DataPackage.initializeEQMarkerManager(getActivity(), googleMap)) {
            Log.w(Tag, "EQMarkerManager initialization failure");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

EQMarkerManager:

public EQMarkerManager(Context ctx, GoogleMap map) {
    // ...
    clusterManager = new ClusterManager<>(ctx, map);
    clusterManager.setRenderer(new EQRenderer<>(ctx, map, clusterManager));

    map.setOnCameraIdleListener(this);

    clusterManager.addItems(markers);
}
Run Code Online (Sandbox Code Playgroud)


initializeEQMarkerManager 方法会初始化 EQMarkerManager 类,并且 EQMarkerManager#ctor 会调用 setOnCameraIdleListener。我对 android 不太了解,所以我完全确定这些代码是否有效。但事实并非如此:/

无论如何,我通过在 . 内部调用 setOnCameraIdleListener 解决了这个问题FragMap

@Override
public void onMapReady(GoogleMap googleMap) {
    if (DataPackage.getEQMarkerManager() == null) {
        if (!DataPackage.initializeEQMarkerManager(getActivity())) {
            Log.w(Tag, "EQMarkerManager initialization failure");
            return;
        }
    }

    googleMap.setOnCameraIdleListener(DataPackage.getEQMarkerManager());
}
Run Code Online (Sandbox Code Playgroud)