Как управлять увеличением и уменьшением масштаба карты в Android?

В моем приложении для Android у меня есть MapActivity, где при масштабировании карты двумя пальцами (щепотка) она увеличивается, но когда я поднимаю пальцы, она увеличивается. Это означает, что если Лондон находится в центре карты, когда я увеличиваю масштаб, Лондон достигает краев экрана; когда я поднимаю пальцы, он выходит за пределы экрана, увеличивая масштаб. Я хочу, чтобы это было похоже на приложение карты iOS (без дальнейшего увеличения). Как я могу это сделать?

Я пробовал следующий код, но не работал.

class MapOvelay extends Overlay {
   boolean moveTouch;
   int i;

    @Override
    public boolean onTouchEvent(MotionEvent event, MapView mapView) {
       switch (event.getAction()) {     
         case MotionEvent.ACTION_POINTER_UP://when two fingers are lifted
           mapController.setZoom(i);
           i=0;
           break;

         case MotionEvent.ACTION_MOVE://when two fingers are moving on map
           i = mapView.getZoomLevel();
           moveTouch = true;
           break;
   .... 
  }
 }
}

person P Srinivas Goud    schedule 04.06.2012    source источник
comment
можете ли вы попробовать проверить и добавить журнал событий для масштабирования. Я предполагаю, что ACTION_MOVE зарегистрирован после ACTION_POINTER_UP или ACTION_UP   -  person MikeIsrael    schedule 18.06.2012
comment
Вы нашли решение? Я тоже столкнулся с той же проблемой.   -  person Veer    schedule 29.09.2012
comment
@Veer Нет. Это поведение карты Google.   -  person P Srinivas Goud    schedule 03.10.2012
comment
Хорошо, я тоже проверил приложение Google Map для версии 2.2, и оно тоже ведет себя так же (с чрезмерным масштабированием). Но если вы проверите приложение Google Map для 4.0, все работает нормально. Но когда мы реализуем наше представление карты в версии 4.0, оно слишком масштабируется. Так что, я думаю, должно быть какое-то решение ..   -  person Veer    schedule 03.10.2012
comment
@Veer Попробуйте 4.1 Jelly Bean, возможно, есть решение из-за проекта Butter, я не уверен ..   -  person P Srinivas Goud    schedule 03.10.2012


Ответы (3)


Вы пробовали функциональность zoomToSpan?

mMapController.zoomToSpan(maxLatitude - minLatitude,maxLongitude - minLongitude);

Кроме того, вы можете ограничить минимальное масштабирование чем-то вроде этого

if (LOWEST_ZOOM_LEVEL < mMap.getZoomLevel() ) {
    mMapController.setZoom(LOWEST_ZOOM_LEVEL);
}
person mach    schedule 18.06.2012

Попробуй это

    mapview.getController().animateTo(startGP);
    mapview.getController().setZoom(13);        
    mapview.setBuiltInZoomControls(true);
    mapview.invalidate();
person Kalai Selvan.G    schedule 18.06.2012

Вы можете получить максимально доступный уровень масштабирования, вызвав #getMaxZoomLevel() в MapView. Это самый близкий масштаб, который вы сможете получить, независимо от того, что происходит в официальном приложении Google Maps. mapView.getController().animateTo(geoPoint); mapView.getController().setZoom(15); mapView.invalidate();

person Jay Thakkar    schedule 18.06.2012