У меня есть несколько маркеров, показанных на моей карте, которые либо близки друг к другу, либо даже поверх друг друга. Мне нужно иметь один конкретный маркер всегда сверху. Неважно, добавляю ли маркер к карте сначала или в последнюю очередь, она часто оказывается помещенной за некоторыми маркерами. По какой-то загадочной причине Google Maps определяет это. Он должен работать с Google Maps для Android V2.
Изменение z-индекса (z-порядок) маркера карты для Maps V2 в Android
Ответ 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.