я занимаюсь разработкой моего первого приложения и я создал следующую карту просмотра деятельности:Как добавить 2 слушателей к карте?
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). Итак, как заставить обоих слушателей работать на одном и том же объекте карты?
Благодарим вас за ваши ответы и извините за мой английский.
Спасибо! Это сработало! Я не понимаю, что вы сказали об интерфейсе ... – smartmouse
На данный момент ваш ClusterManager реализует интерфейс OnCameraChangeListener. Я не знаю реализации, но sth вот так: 'public class ClusterManager расширяет SomeOtherClass реализует OnCameraChangeListener'. При моем подходе вы можете удалить «реализует OnCameraChangeListener'part, так как вы больше не устанавливаете этот класс в качестве слушателя. Но вы все равно сохраняете метод onCameraChange, поскольку вы вызываете его напрямую. – Alf
Я ошибаюсь, если я сохраню реализацию? – smartmouse