Изменить значок маркера во время выполнения

Есть ли способ изменить значок маркера Google Maps Android API v2 во время выполнения без удаления/повторного добавления маркера, который я хочу изменить? Могу ли я применить к нему преобразования (например, вращение)?

Спасибо.


person Juliano Nunes Silva Oliveira    schedule 22.01.2013    source источник
comment
Яп. если этот значок сделан самостоятельно и помещен в папку res/drawable в вашем проекте, вы можете анимировать его. Анимацию см. в Руководстве по разработке.   -  person BBonDoo    schedule 22.01.2013
comment
Маркер имеет новую функцию, добавленную в версии 7 API v2. См. Marker.setIcon.   -  person MaciejGórski    schedule 21.05.2013
comment
@ MaciejGórski привет, не могли бы вы рассказать мне, как обновить API карт Google до версии 7. Я пытался использовать эту функцию, но мой проект не компилируется.   -  person GingerJim    schedule 31.05.2013
comment
@GingerJim Я только что обновил элемент Google Play Services в SDK Manager и импортировал, скомпилировал, а затем добавил в основной проект, это сработало для меня, теперь я могу изменить значок маркера во время выполнения.   -  person Balaji    schedule 19.06.2013


Ответы (5)


В настоящее время вы не можете ни изменить маркер во время выполнения, ни применить к нему вращение.

Однако вы можете использовать обходной путь - я работаю над классом BlinkingMarker, где мне нужно настроить непрозрачность изображения маркера во время выполнения.

Единственным решением на данный момент является создание растровых изображений с различным поворотом, а затем их периодическое добавление/удаление. Проблема с этим решением заключается в том, что добавление/удаление маркеров занимает много памяти, что приводит к постоянной сборке мусора. Лучший и более плавный обходной путь — создать все свои изображения заранее и сразу добавить их все на карту. После этого вы можете использовать функцию Marker.setVisible(boolean) для отображения того, что вам нужно в данный момент.

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

Вы можете посмотреть мой обходной путь здесь: https://github.com/balazsbalazs/blinking-marker-mapsv2

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

person balazsbalazs    schedule 22.01.2013

Я могу легко менять значки маркеров во время выполнения после обновления до Google Play Services Rev 7 , теперь

Marker.setIcon (значок BitmapDescriptor)

доступен, ранее я удалял и добавлял маркер, чтобы изменить его цвет.

person Balaji    schedule 19.06.2013
comment
Что делать, если у меня есть несколько контактов и я изменил цвет выбранного контакта, а невыбранный должен быть по умолчанию? Спасибо - person dhiku; 25.11.2013
comment
@dhiku, извините за поздний ответ, я не уверен в требованиях, вы получите рыночную ссылку при нажатии на маркер или окно информации о маркере, поэтому вы можете изменить значок, вы также можете поддерживать HashMap маркеров и обрабатывать его, если у вас есть разные требование. FYI BitmapDescriptor green = BitmapDescriptorFactory .fromResource(R.drawable.marker_green); BitmapDescriptor blue = BitmapDescriptorFactory .fromResource(R.drawable.marker_gray); marker.setIcon(выделено? зеленый: синий); - person Balaji; 29.11.2013
comment
@dhiku, теперь я получил ваше требование, я думаю, вам нужно поддерживать коллекцию маркеров, т.е. набор - person Balaji; 29.11.2013

В документах этот вопрос очень ясен:

Icon
    A bitmap that's displayed in place of the default marker image. You can't change the icon once you've created the marker.

Если вы хотите изменить внешний вид маркера, у вас есть несколько вариантов. Один из них, как вы заметили, удалить маркер и добавить еще один. Другой способ — разместить несколько маркеров в одном месте и выбрать, какой из них будет видимым в любой момент времени.

Могу ли я применить к нему преобразования (например, вращение)?

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

person iagreen    schedule 22.01.2013
comment
Я только что наткнулся на этот пост, этот ответ устарел? Потому что я обнаружил, что могу изменить значок с помощью setIcon() - person Arch1tect; 05.06.2013

В выпуске Google Maps Android v2 от сентября 2013 г. теперь есть новый setRotation() для маркеров, а также новый setFlat().

Вот описание новых функций от Google:

Дайте вашим маркерам ощущение направления

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

Вот статья с описанием новые функции.

person Sean Barbeau    schedule 23.09.2013

Чтобы изменить выбранный значок маркера во время выполнения, просто добавьте

      @Override
      public boolean onMarkerClick(Marker marker) {

       Marker.setIcon (BitmapDescriptor icon);
       }
person Akshatha Srinivas    schedule 22.07.2014