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-индексацией без использования информационных окон.