Intereting Posts
Тестирование Android-модуля с использованием проекта ant с библиотекой API Dropbox Sync – неудовлетворенная ошибка связи Нарушение счетчика активности экземпляра StrictMode (2 экземпляра, 1 ожидается) при вращении полностью пустой активности Тонкий синий индикатор выполнения Как обнулить переменную типа float Программно изменить ширину кнопки в android Есть ли способ получить длительность продолжающегося восстановления Добавление панели действий в список Сканирование SD-карты Android для новых файлов Уведомление о плагине Cordova (java) не входит в приложение – андроид Получайте дату и время в дни, часы, минуты и секунды в Android Удалять полосу прокрутки из программы ScrollView программно в Android Удаление предыдущей версии папки для Android-студии Android.support.v4.widget.CircleImageView не работает На какой ширине экрана dp панель действий не разбивается, когда андроид: uiOptions = "splitActionBarWhenNarrow" установлен?

Android Maps API v2 – подходит для поворота маркера?

Мы переносим приложение из API v1 Maps API в v2 API и имеем проблемы с маркерами.

Нам нужны маркеры, которые указывают в определенном географическом направлении. В V1 мы могли бы построить растровое изображение, указывающее в правильном направлении во время рисования, но в V2 растровое изображение маркера не может быть изменено.

Я не уверен, что лучший подход состоит в том, чтобы уничтожить и перестроить все наши маркеры, когда карта повернута (что звучит как проблема с производительностью), или попытаться собрать все сами. Это может быть через TileOverlay или по собственному мнению, что мы сидели на вершине карты.

Мне не нравится какой-либо из этих подходов. Кто-нибудь пробовал кого-нибудь из них?

ОБНОВИТЬ:

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

Я теперь уничтожаю и воссоздаю маркеры, но это (как и ожидалось) проблема с производительностью, принимая ~ 2000 мс для обновления 60 маркеров.

Solutions Collecting From Web of "Android Maps API v2 – подходит для поворота маркера?"

Хорошая новость! Google добавила ротацию в API Карт, поэтому нам больше не нужно откатывать наши собственные реализации.

Они также добавили плоские маркеры, которые, я думаю, больше связаны с исходным вопросом. Сплющенный маркер всегда останется в ориентации, которую он первоначально нарисовал на карте: https://developers.google.com/maps/documentation/android/marker#flatten_a_marker

Единственное требование – ссылка на последнюю версию Служб Google Play.

Вы не можете использовать addMarker(new MarkerOptions()) ?

Если вам нужен пользовательский маркер, вы можете создать реализацию InfoWindowAdapter и использовать эту реализацию, например mMap.setInfoWindowAdapter(new CustomInfoWindowAdapter());

Вот документация для InfoWindowAdapter

Я также переписываю свое приложение (Runbot) для нового API и должен был выяснить, как создавать пользовательские маркеры, представляющие этапы (например, 1 км, 2 км, …) и как показывать или показывать не все из них в зависимости от масштабирования уровень. У меня был пользовательский вариант, который я использовал для API-интерфейса v1, и теперь я делаю это, чтобы сделать маркеры ( Position – это мой класс, который содержит позицию и дополнительную информацию, все необходимое здесь – свойство LatLng ):

 private void addMarker(Position p, MilestoneDrawable milestone) { if (mMarkers.containsKey(p)) { mMarkers.get(p).setVisible(true); } else { Marker m = mMap.addMarker(new MarkerOptions() .position(p.latLng) .icon(BitmapDescriptorFactory.fromBitmap(Util.drawableToBitmap(milestone))) .anchor(0.5f, 1.0f) // bottom center ); mMarkers.put(p, m); } } 

Помимо создания и добавления пользовательских маркеров, вы видите, что я сохраняю маркеры в HashMap поэтому мне не нужно постоянно их уничтожать и создавать. Когда дело доходит до масштабирования и принятия решения о том, какие из них нужно показать, я сначала установил все маркеры в невидимые, а затем вызвал addMarker() для тех, кого хочу показать, а те, которые у меня уже есть в HashMap я просто снова вижу.

Надеюсь, это поможет вам немного. У меня немного смешанные чувства к новому API …

У меня была аналогичная проблема, когда у меня были маркеры, которые нужно было вращать. Мое решение состояло в том, чтобы объект, которому был представлен маркер, отвечал за создание маркера. У меня есть несколько методов в объекте, который выглядит так:

 protected Marker getMarker(GoogleMap map) { if (this.marker == null) { marker = map.addMarker(new MarkerOptions().position(location). icon(BitmapDescriptorFactory.fromBitmap(BusMarkerImageFactory. getMarkerIcon(heading)))); } return marker; } protected void updateMarker(GoogleMap map) { if (marker != null) { rotateIcon(); marker.setPosition(location); } else { getMarker(map); } private void rotateIcon() { marker.setIcon(BitmapDescriptorFactory. fromBitmap(BusMarkerImageFactory.getMarkerIcon(heading))); } 

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

Конечно, рисование всех этих растровых изображений для небольших изменений – это утечка памяти. Я использовал шаблон flyweight в (неправильно названном) BusMarkerImageFactory, чтобы сохранить 16 изображений для 16 возможных диапазонов заголовков. Это статический класс, который просто берет заголовок и возвращает изображение, которое я сопоставил с этим диапазоном.