android - 我怎样才能让两个谷歌地图听众? setOnCameraChangeListener

标签 android google-maps cluster-computing android-maps-utils

如何创建两个监听器?一个用于聚类,如果 map 上不存在聚类项,另一个将向 map 加载新的聚类项。

       //needed for clustering
       map.setOnCameraChangeListener(mClusterManager);

       // need for loading clusteritems
       map.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
       @Override
       public void onCameraChange(CameraPosition position) {

       // ifMarkesNotInsideMapReload...

我认为这是不可能的,但有人可能解决了这个问题......

一个想法是设置一个起始位置并手动轮询变化..不太酷:-)

我正在使用谷歌集群库:google cluster

最佳答案

使用 Composite Pattern创建一个既 CameraChangeListener包含 CameraChangeListener 的类,这样它就可以设置为 map 上的唯一听众,同时委托(delegate)给多个 child 做真正的工作。

在这种情况下,您将创建一个 CompositeCameraChangeListener 类,该类实现 CameraChangeListener 接口(interface)并维护它委托(delegate)给的子监听器列表。

一些伪代码:

public class CompositeCameraChangeListener implements CameraChangeListener {
    private final List<CameraChangeListener> mListeners = new ArrayList<CameraChangeListener>();

    @Override
    public void onCameraChange(CameraPosition position) {
        for (CameraChangeListener listener in mListeners) {
            listener.onCameraChange(position);
        }
    }

    // Other methods to add, remove listeners
}

然后在你的主类中:

CompositeCameraChangeListener composite = new CompositeCameraChangeListener();
composite.add(mClusterManager);
composite.add(new CameraChangeListner() { ... });
map.setOnCameraChangeListener(composite);

现在,当 CompositeCameraChangeListener 的方法被调用时,它会将调用转发给其他监听器,就您的应用程序而言,您现在有两个(或更多)监听器注册在一个对象上旨在仅接受一个。

关于android - 我怎样才能让两个谷歌地图听众? setOnCameraChangeListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21482882/

相关文章:

R,多重对应分析后的层次聚类问题

sql-server-2008 - 新服务器上的子 SSIS 包出现随机 0x80004003 无效指针错误

android - 通过 Intent 将图库图像传递给另一个 Activity

android - 在 Android XML 中重用 TextView 代码

android - 表间关系问题

javascript - 谷歌地图——折纸效果,怎么样?

javascript - 如何获取点击标记的信息窗口

c# - Windows 服务器上的 Hadoop

android - 如何动画右刻度线

android - 地方的 Google 服务器和 Android API key 之间的区别