Подтвердить что ты не робот

Изменение z-индекса (z-порядок) маркера карты для Maps V2 в Android

У меня есть несколько маркеров, показанных на моей карте, которые либо близки друг к другу, либо даже поверх друг друга. Мне нужно иметь один конкретный маркер всегда сверху. Неважно, добавляю ли маркер к карте сначала или в последнюю очередь, она часто оказывается помещенной за некоторыми маркерами. По какой-то загадочной причине Google Maps определяет это. Он должен работать с Google Maps для Android V2.

4b9b3361

Ответ 1

27 июня 2016 года версия v9.2.0 от Android Maps API v2 теперь поддерживает z-index - см. объявление в https://developers.google.com/maps/documentation/android-api/releases#june_27_2016.

Итак, убедитесь, что для вашей версии карт/игровых сервисов установлено значение v9.2.0 или выше в build.gradle:

compile 'com.google.android.gms:play-services-maps:9.2.0'

Документация z-index ниже (от https://developers.google.com/maps/documentation/android-api/marker#marker_z-index):

Z-index указывает порядок стека этого маркера относительно других маркеров на карте. Маркер с высоким индексом z рисуется поверх маркеров с более низкими z-индексами. Значение z по умолчанию по умолчанию равно 0.

Маркеры всегда вычерчиваются над слоями плитки и другими немаркетинговыми накладками (наложения на землю, полилинии, многоугольники и другие фигуры) независимо от z-индекса других накладок. Маркеры эффективно рассматриваются в отдельной группе z-index по сравнению с другими оверлеями.

Вы можете установить индекс при добавлении маркера к карте:

map.addMarker(new MarkerOptions()
    .position(new LatLng(10, 10))
    .title("Marker z1")
    .zIndex(1.0f));

... или используя Marker.setZIndex() после создания маркера.

Дополнительная документация о влиянии z-индекса на события щелчка ниже (от https://developers.google.com/maps/documentation/android-api/marker#marker_click_events):

  • Когда пользователь нажимает на кластер маркеров, событие click запускается для маркера с самым высоким индексом z.
  • Не более одного события запускается за клик. Другими словами, клик не передается на маркеры или другие наложения с более низкими значениями z-индекса.
  • Нажатие на кластер маркеров вызывает последующие клики для циклического перехода по кластеру, поочередно выбрав их. Порядок цикла сначала приостанавливает z-индекс, затем близость к точке щелчка.
  • Если пользователь щелкает за пределами близости кластера, API пересчитывает кластер и сбрасывает состояние цикла щелчка, чтобы он начинался с самого начала.
  • Событие клика попадает через кластеры маркеров в другие формы и наложения перед перезапуском цикла.
  • Маркеры эффективно рассматриваются в отдельной группе z-index по сравнению с другими наложениями или фигурами (полилиниями, полигонами, кругами и/или наземными наложениями), независимо от z-индекса других накладок. Если несколько маркеров, наложений или фигур накладываются друг на друга, событие щелчка сначала циклически выполняется через кластер маркеров, а затем запускается для других кликабельных наложений или фигур на основе их значений z-индекса.

Ответ 2

Найдено решение:

Marker.showInfoWindow();

Это не оптимально, потому что оно вызывает информационное окно над маркером, но это лучше, чем ничего.

Ответ 3

К сожалению, Markers в Google Map API V2 для Android не имеет z-индексов. Они обрабатывают свой собственный порядок розыгрыша

Ответ 4

Я считаю, что этот пост является дубликатом Google Maps v2 Marker zOrdering - установите в начало. Bastien Beurier отвечает, что там используется решение Marker.showInfoWindow(), а также демонстрирует, как создать 0x0-значение, если вы действительно не хотите, чтобы отображалась информация.

Также обратите внимание на мой комментарий ниже этого ответа о добавлении TextView в LinearLayout.