Google Maps v2 Маркер zOrdering - установить в начало
Я знаю, что в этой теме есть несколько тем, но я все же нашел достаточно хорошее решение.
Мне НЕОБХОДИМО разместить маркер поверх всех других маркеров. Как это сделать?
Я попытался добавить этот маркер до и после всех других маркеров, однако упорядочение, кажется, происходит от нижней (передней) до верхней (назад) на карте. Это неприемлемо, поскольку я хочу сосредоточиться на маркере, который находится перед всеми маркерами.
Я знаю, что многоугольники могут быть zOrdered, но я бы предпочел красиво оформленную графику!
Фактически вы не можете заказать многоугольник над маркером!
"Порядок, в котором этот многоугольник рисуется по отношению к другим наложениям, включая Полилинии, GroundOverlays и TileOverlays, но не Markers. Наложение с большим z-индексом нарисовано поверх наложений с меньшими z-индексами. наложения с тем же значением z-index произвольны. Значение по умолчанию равно 0." - https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/model/Polygon
Есть ли у кого-нибудь идеи по этому поводу?
Ответы
Ответ 1
Хотя это не идеальное решение! Я выяснил, как показать выбранный (постукиваемый) маркер над всеми другими маркерами, потребляя событие onMarkerClick. Возвращение TRUE будет потреблять это событие, поэтому мы должны сделать showInfoWindow и масштабировать в центр
@Override
public boolean onMarkerClick(Marker marker) {
//Manually open the window
marker.showInfoWindow();
//Animate to center
sMapFrag_v2.getMap().animateCamera(CameraUpdateFactory.newLatLng(marker.getPosition());
//Consume the method
return true;
}
Ответ 2
Ответ Aiden Fry работает, если вы действительно показываете InfoWindow. Если вы этого не сделаете, маркер не выйдет на передний план. Вот хак, чтобы он все равно вышел на фронт:
Создайте пользовательский InfoWindowAdapter, который отобразит информационное окно 0dp:
public class MapWindowAdapter implements GoogleMap.InfoWindowAdapter {
private Context context = null;
public MapWindowAdapter(Context context) {
this.context = context;
}
// Hack to prevent info window from displaying: use a 0dp/0dp frame
@Override
public View getInfoWindow(Marker marker) {
View v = ((Activity) context).getLayoutInflater().inflate(R.layout.no_info_window, null);
return v;
}
@Override
public View getInfoContents(Marker marker) {
return null;
}
}
Вот код макета:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="0dp"
android:layout_height="0dp">
</LinearLayout>
Когда вы настроите свою карту, установите адаптер и пользовательские InfoWindowAdapter и OnMarkerClickListener (используя showInfoWindow и верните true, как сообщается AIden Fry):
mMap.setInfoWindowAdapter(new MapWindowAdapter(this));
//Call showInfoWindow to put marker on top of others.
myMarker.showInfoWindow();
Это не красиво, но я не нашел другого способа справиться с z-индексацией без использования информационных окон.
Ответ 3
Это было добавлено в Служба Google Play 9.2 (27 июня 2016 г.)
Новый MarkerOptions.zIndex()
устанавливает порядок стека маркера по отношению к другим маркерам на карте. Подробнее о маркерных z-индексах и о влиянии z-индекса на события кликов. (Проблема 4688)