Установите минимальный уровень масштабирования для MapView

Есть ли способ установить минимальный уровень масштабирования для моего MapView? Карта выглядит очень уродливо, когда уровень масштабирования установлен на единицу, потому что реплицируется вся карта мира.

Я хотел бы заблокировать этот уровень масштабирования. В идеале это должно работать независимо от того, увеличивает ли пользователь жесты или элементы управления масштабированием.


person ggomeze    schedule 10.11.2010    source источник


Ответы (3)


К счастью, у меня было наложение в моем MapView. В противном случае, я думаю, вам придется создать его только для этой крошечной функции :-/. Интересно, почему нет другого способа сделать это проще.

В любом случае, вам просто нужно переопределить метод рисования следующим образом:

@Override
    public void draw(Canvas canvas, MapView mapView, boolean shadow) {
        super.draw(canvas, mapView, shadow);
        if (mapView.getZoomLevel() < 2)
            mapView.getController().setZoom(2);
    }

Гер

person ggomeze    schedule 10.11.2010

Аналогично ответу ggomeze путем переопределения метода *draw(), но может быть лучше переопределить dispatchDraw() в MapView. Таким образом, вы можете заблокировать отрисовку для уровня масштабирования, когда плитки пусты.

Также обратите внимание, что хорошо центрировать карту в этой точке, так как если вы масштабируете сенсорными жестами, вручную устанавливая масштаб на один уровень, это может привести к тому, что карта каждый раз смещается от центра (из-за чего MapView выглядит немного более хитроумным !).

@Override
public void dispatchDraw(Canvas canvas) {

    //limit zoom level 
    if(getZoomLevel() == 1){
        getController().setZoom(2);
        getController().setCenter(new GeoPoint(0, 0));
        //dont draw as it will just be blank and then jump
        return;
    }

    super.dispatchDraw(canvas);
}

Это можно улучшить, отслеживая уровень масштабирования во время выполнения жеста, чтобы пользователь не мог видеть частичное масштабирование до заблокированного минимального уровня масштабирования (1) во время жестикулирования, но я полагаю, что описанный выше случай подойдет больше всего, и это много Полегче!

person Dori    schedule 31.01.2012

просто напишите onCreate следующий код:

MapController myMC myMapView.getController();
myMC.setZoom(int value);
person polyakovsky    schedule 10.11.2010
comment
Спасибо за быстрый ответ. Однако это не решение моей проблемы. С помощью этого кода вы просто устанавливаете начальный уровень масштабирования. Но это не исключает того, что пользователь может уменьшить масштаб и получить уродливое представление карты с уровнем масштабирования, равным 1 (две африки, две америки) - person ggomeze; 10.11.2010
comment
если вы не ищете только стандартный вариант, установите ограничитель вручную :) - person polyakovsky; 10.11.2010
comment
Почему вы ограничиваете действия пользователя? Что, если они хотят увидеть весь мир? - person Falmarri; 10.11.2010
comment
Я разрешаю пользователю видеть весь мир (увеличение = 2), но не хочу, чтобы он видел его дважды (увеличение = 1) - person ggomeze; 12.11.2010