Я разрабатываю приложение для Android, которое должно использовать Google Maps v2. Теперь я застрял в поиске, когда изменился масштаб карты. Может кто-нибудь мне помочь? Спасибо заранее.
Прослушиватель уровня изображения в google maps v2 в android
Ответ 1
Создайте реализацию из OnCameraChangeListener
и передайте экземпляр в setOnCameraChangeListener()
вашего GoogleMap
. Ваш слушатель должен вызываться с помощью onCameraChange()
всякий раз, когда пользователь меняет масштаб, центр или наклон. Вы узнаете новый уровень масштабирования от объекта CameraPosition
, который вы передали.
Ответ 2
Если вы ищете, как определить, изменился ли уровень масштабирования с предыдущего уровня масштабирования, вот что я хотел бы предложить:
Определите переменную экземпляра, чтобы отслеживать предыдущий уровень масштабирования:
//Initialize to a non-valid zoom value
private float previousZoomLevel = -1.0f;
Кроме того, определите переменную экземпляра, чтобы узнать, масштабируется ли карта:
private boolean isZooming = false;
Когда вы настраиваете свой экземпляр GoogleMap, дайте ему OnCameraChangeListener...
//mMap is an instance of GoogleMap
mMap.setOnCameraChangeListener(getCameraChangeListener());
Теперь определите OnCameraChangeListener, который определит, изменился ли уровень масштабирования:
public OnCameraChangeListener getCameraChangeListener()
{
return new OnCameraChangeListener()
{
@Override
public void onCameraChange(CameraPosition position)
{
Log.d("Zoom", "Zoom: " + position.zoom);
if(previousZoomLevel != position.zoom)
{
isZooming = true;
}
previousZoomLevel = position.zoom;
}
};
}
Теперь вы можете проверить значение isZooming, чтобы узнать, изменяете ли вы уровни масштабирования.
Обязательно установите
isZooming = false;
после того, как вы выполнили какое-либо действие, полагаясь на знание масштабирования карты.
Ответ 3
Поскольку предыдущие ответы основаны на OnCameraChangeListener
и устарел, этот ответ основан на камере setOnCameraMoveListener
.
В этом примере я изменяю свой Тип карты, когда пользователь меняет масштаб (используя элементы управления или пальцы и масштабирование). Если уровень масштабирования изменяется выше 18.0, тип карты изменяется на MAP_TYPE_HYBRIB
, а если он меньше 18.0, тип карты изменяется на MAP_TYPE_NORMAL
.
googleMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
@Override
public void onCameraMove() {
CameraPosition cameraPosition = googleMap.getCameraPosition();
if(cameraPosition.zoom > 18.0) {
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
} else {
googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
}
}
});