bes*_*erR 3 android google-maps cluster-computing android-maps-utils
如何创建两个侦听器?一个用于群集,另一个将新的群集项加载到地图,如果地图上不存在群集项.
//needed for clustering
map.setOnCameraChangeListener(mClusterManager);
// need for loading clusteritems
map.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition position) {
// ifMarkesNotInsideMapReload...
Run Code Online (Sandbox Code Playgroud)
我认为这不可能,但有人可能会解决这个问题......
一个想法是设置一个起始位置并手动轮询更改..不酷:-)
dom*_*der 15
使用复合模式创建一个类,无论是一CameraChangeListener和含 CameraChangeListener S,使得它可以在地图上,同时委托给多的孩子,做实际工作设置为唯一的听众.
在这种情况下,您将创建一个CompositeCameraChangeListener实现该CameraChangeListener接口的类,并维护它所委托的子侦听器列表.
一些伪代码:
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
}
Run Code Online (Sandbox Code Playgroud)
然后在你的主要课程:
CompositeCameraChangeListener composite = new CompositeCameraChangeListener();
composite.add(mClusterManager);
composite.add(new CameraChangeListner() { ... });
map.setOnCameraChangeListener(composite);
Run Code Online (Sandbox Code Playgroud)
现在,当CompositeCameraChangeListener调用方法时,它会将调用转发给其他侦听器,就您的应用而言,您现在有两个(或更多)侦听器在一个仅被接受的对象上注册.
我已经研究ClusterManager了AMUtils库的实现,看起来它调用onCameraChange了它的实现,ClusterRenderer如果它也实现了OnCameraChangeListener.只需使其实现该接口即可.
代码的相关部分:
@Override
public void onCameraChange(CameraPosition cameraPosition) {
if (mRenderer instanceof GoogleMap.OnCameraChangeListener) {
((GoogleMap.OnCameraChangeListener) mRenderer).onCameraChange(cameraPosition);
}
Run Code Online (Sandbox Code Playgroud)
如果您正在使用DefaultClusterRendeder,请创建一个类,如:
public class MyClusterRenderer extends DefaultClusterRenderer implements OnCameraChangeListener {
Run Code Online (Sandbox Code Playgroud)
对于那些在 TreKing 上面伪代码上苦苦挣扎的人,您可以使用下面的代码片段
public class MultiListener implements GoogleMap.OnCameraChangeListener {
private List<GoogleMap.OnCameraChangeListener> mListeners = new ArrayList<GoogleMap.OnCameraChangeListener>();
public void registerListener (GoogleMap.OnCameraChangeListener listener) {
mListeners.add(listener);
}
@Override
public void onCameraChange(CameraPosition cameraPosition)
{
for (GoogleMap.OnCameraChangeListener ccl: mListeners)
{
ccl.onCameraChange(cameraPosition);
}
}
}
Run Code Online (Sandbox Code Playgroud)
并添加到 MultiListener
MultiListener ml = new MultiListener();
ml.registerListener(mClusterManager);
ml.registerListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
// code here
}
}
);
map.setOnCameraChangeListener(ml);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4629 次 |
| 最近记录: |