如何创建两个监听器?一个用于聚类,如果 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/