Сожмите, чтобы увеличить с помощью Osmdroid

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

До сих пор я тестировал только эмуляторы, и функциональность полностью идентична с точки зрения отображаемой области и данных наложения. Теперь, когда я запустил приложение на реальном устройстве Gingerbread, я заметил, что активность Google Maps, кажется, поддерживает масштабирование, а 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, которое я мог бы изучить и адаптировать к своему приложению?


person NickT    schedule 28.09.2011    source источник


Ответы (4)


Osmdroid имеет функцию масштабирования. Вам нужно будет настроить прослушиватель жестов для проверки действия сжатия, после чего вы должны вызвать функцию масштабирования в 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 года.

person digerati32    schedule 29.09.2011
comment
Спасибо за информацию. Думаю, ссылки пригодятся. Я предполагаю, что активность Google Maps (MapsActivity) должна реализовывать щипок за кулисами. Конечно, их код с закрытым исходным кодом, поэтому, похоже, мне придется немного поработать вместо того, чтобы просто копировать их реализацию. +1 за ссылки. - person NickT; 29.09.2011
comment
Я экспериментировал с ним в своей программе, и приведенный выше код у меня работает. Если это более полезно, то ++! - person digerati32; 29.09.2011
comment
Это сработало бы сразу, если бы я не был таким ИДИОТОМ! Я пропустил строку mMapVw.setMultiTouchControls(true); Я, конечно, не собираюсь отвечать на свой вопрос этим. Поэтому, чтобы другие не тратили свое время впустую, и в благодарность за то, что вы заставили меня задуматься, я приму ваш ответ. - person NickT; 30.09.2011

Можно ли приближать не к центру карты а к середине юзеров двумя пальцами.

person Ismail Sahin    schedule 01.03.2013
comment
вы нашли хорошее решение? если да, ответьте на мой вопрос stackoverflow.com/questions/15626091/osmdroid-and-pinch - person Massimo Variolo; 02.04.2013
comment
К сожалению, нет, но я тоже задал вопрос здесь, может быть, однажды он будет решен :) in-osmdroid" title="два пальца или пинцет для просмотра карты в osmdroid"> stackoverflow.com/questions/15159544/ - person Ismail Sahin; 03.04.2013

Как сказал Shamus.burp, кодовая линия-

mapView.setMultiTouchControls(true); 

У меня работает, чтобы ущипнуть для увеличения (проверить в 2021 году).

Обратите внимание, что функция, которую показывает зум-контроллер (в основном это кнопки (-) и (+)) -

MapView.setBuiltInZoomControls(true);

устарел osmdroid.

Поэтому вместо этого вы можете использовать строку кода -

mapView.getZoomController().setVisibility(CustomZoomButtonsController.Visibility.ALWAYS);

По умолчанию (без добавления последней строки кода) osmdroid настроен на отображение и исчезновение контроллера масштабирования. Эквивалентно

CustomZoomButtonsController.Visibility.SHOW_AND_FADEOUT 

вариант.

person dana wisher    schedule 14.07.2021

person    schedule
comment
Я обнаружил, что масштабирование выглядит нормально, когда я двигаю двумя пальцами, но как только я поднимаю их, карта переходит в другое положение. @Warpzit Это то, что вы имели в виду под плохой реализацией? - person David Doria; 26.08.2013
comment
Отлично работает на моем Defy Plus. Я еще не пробовал это на других устройствах. - person Ilya Kogan; 08.09.2013
comment
Самсунг с2 киткат работает отлично. спасибо ПРОГОЛОСОВАНО! - person tony gil; 03.05.2016