Зажмите для увеличения с помощью Osmdroid

Я написал приложение сопоставления, которое имеет два действия, одно действие отображает представление Google Maps, а другое отображает эквивалентное представление с использованием флага osmdroid 3.0.5.

До сих пор я тестировал только эмуляторы, и функциональность полностью идентична по показанным областям и оверлейным данным. Теперь я запустил приложение на реальном устройстве Gingerbread, я заметил, что активность в Google Картах, похоже, поддерживает сжатие, а Osmdroid - нет.

Я не написал какой-либо код, который мог бы увеличить размер для Google или для Osmdroid. Оба действия реализуют OnTouchListener. В обоих действиях есть только заглушка для OnTouch:

@Override
public boolean onTouch(View v, MotionEvent e) {
    // chain it for now
    return false;
}

Мое отображение в активности Osmdroid относится к классу: org.osmdroid.views.MapView

Кто-нибудь знает, как сделать щепотку для увеличения работы с osmdroid или узнать пример приложения с помощью osmdroid, который я мог бы изучить и адаптировать в своем приложении?

Ответ 1

Osmdroid имеет функциональность для масштабирования. Вам нужно будет настроить gesturelistener, чтобы проверить действие пинча, после чего вы должны вызвать функцию масштабирования в osmdroid. Я верю в osmdroid 3.0.5, это что-то вроде

mOsm.getController.setZoomLevel(someNumber) (mOsm - это экземпляр вида карты).

У меня есть функция масштабирования, работающая на противоположный пинч (пальцы начинают сближаться, а затем расширяются). Я предлагаю использовать MotionEvent (например, вы сейчас делаете) и делаете что-то вроде этого:

boolean finished = false;

@Override
public boolean onTouch(View v, MotionEvent e) {

    switch (e.getAction()) {

        case MotionEvent.ACTION_DOWN:
            finished = false;
            break;

        case MotionEvent.ACTION_MOVE:
            finished = false;
            break;

        case MotionEvent.ACTION_UP:
            //action is finishing at this point, so now I can do my refreshActionOnMap();
            if (!finished) 
                refreshActionOnMap();
            break;
    }
    return true;
}

Код, который я добавил, имеет дело с пинчем - законченное логическое значение - это то, что я реализовал в своей программе, чтобы выяснить, когда обновить карту. Это должно помочь вам больше.

Здесь это еще одно объяснение.

Если вы ищете что-то другое, попробуйте прочитать здесь. Android поддерживает поддержку с июня 2010 года.

Ответ 2

MapView.setBuiltInZoomControls(true);
MapView.setMultiTouchControls(true);

Ответ 3

Можно ли не масштабировать до центра карты, а посередине пользователей - два пальца.