如何添加 2 个监听器映射?

How to add 2 listeners to map?

我正在开发我的第一个应用程序,我创建了以下地图查看器activity:

public class MapViewer extends Activity implements OnInfoWindowClickListener, ClusterManager.OnClusterClickListener<MyItem> {

    private GoogleMap map;
    private LatLng defaultLatLng = new LatLng(X, Y);
    private int zoomLevel = 5;
    private Database db = new Database(this);
    private ClusterManager<MyItem> mClusterManager;

    private LatLngBounds allowedBounds;
    private final LatLng northeast = new LatLng(A, B);
    private final LatLng southwest = new LatLng(C, D);

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mapviewer);

        LatLngBounds.Builder builder = new LatLngBounds.Builder();
        builder.include(northeast);
        builder.include(southwest);
        allowedBounds = builder.build();

        try {
            map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
            if (map != null) {
                map.setMyLocationEnabled(true);
                map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                map.getUiSettings().setRotateGesturesEnabled(false);

                map.moveCamera(CameraUpdateFactory.newLatLngZoom(defaultLatLng, zoomLevel));

                mClusterManager = new ClusterManager<MyItem>(this, map);
                mClusterManager.setRenderer(new MyClusterRenderer(this, map, mClusterManager));
                mClusterManager.setOnClusterClickListener(this);

                map.setOnCameraChangeListener(mClusterManager);
                map.setOnMarkerClickListener(mClusterManager);

                map.setInfoWindowAdapter(new ClusterInfoWindow(getLayoutInflater())); 
                map.setOnInfoWindowClickListener(this);

                addItems();
            }
        } catch (NullPointerException e) {
            e.printStackTrace();
        }
    }
}

如你所见,我设置了一个监听器来映射对象

map.setOnCameraChangeListener(mClusterManager);

根据缩放级别在标记组上添加或删除集群。 现在我要添加一个侦听器来检查用户是否在某个范围内在地图上移动:

map.setOnCameraChangeListener(new OnCameraChangeListener() {
    @Override
    public void onCameraChange(CameraPosition cameraPosition) {
        checkBounds();
    }
});

但是没用。仅当我删除以前的侦听器 (mClusterManager) 时它才有效。 那么,如何让两个监听器在同一个地图对象上工作呢?

提前感谢您的回复,对不起我的英语。

由于只有set方法,没有add方法,所以一次只能设置一个监听器。但是您可以像这样从一个听众委托给另一个听众:

map.setOnCameraChangeListener(new OnCameraChangeListener() { @Override public void onCameraChange(CameraPosition cameraPosition) { checkBounds(); mClusterManager.onCameraChange(cameraPosition); } });

mClusterManager当然不需要实现CameraChangeListener接口了,只需要一个方法public void onCameraChange(CameraPosition cameraPosition).