24

このトピックにはいくつかのスレッドがあることは知っていますが、まだ十分な解決策を見つけていません。

他のすべてのマーカーの上にマーカーを配置する必要があります。どうすればいいですか?

このマーカーを他のすべてのマーカーの前後に追加しようとしましたが、順序はマップ ビューで下 (前) から上 (後) のようです。すべてのマーカーの前にあるマーカーを中心にしたいので、これは受け入れられません。

Polygons を zOrdered にできることは知っていますが、うまくスタイルされたグラフィックの方がずっと好きです!

実際、マーカーの上にポリゴンを並べることはできません!

「このポリゴンが、Polylines、GroundOverlays、TileOverlays などの他のオーバーレイに対して描画される順序ですが、マーカーは含まれません。z インデックスが大きいオーバーレイは、z インデックスが小さいオーバーレイの上に描画されます。同じ z-index 値は任意です。既定値は 0 です。" - https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/model/Polygon

誰かがこれについて何か考えを持っていますか?

4

3 に答える 3

43

Aiden Fry の答えは、実際に InfoWindow を表示する場合に機能します。そうしないと、マーカーが前面に出ません。とにかく前面に出すためのハックを次に示します。

0dp 情報ウィンドウを表示するカスタム InfoWindowAdapter を作成します。

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 を使用し、AIden Fry がアドバイスしたように true を返します)。

mMap.setInfoWindowAdapter(new MapWindowAdapter(this));

//Call showInfoWindow to put marker on top of others.
myMarker.showInfoWindow();

これは美しくありませんが、情報ウィンドウを使用せずに z-indexing を処理する他の方法を見つけられませんでした。

于 2013-06-19T16:48:53.383 に答える
18

これは、Google Play Services 9.2 ( 2016 年 6 月 27 日)で追加されました。

新しいMarkerOptions.zIndex()は、マップ上の他のマーカーに対するマーカーのスタック順序を設定します。マーカーの z-index と、クリック イベントに対する z-index の効果の詳細をご覧ください。(問題 4688 )

于 2016-06-27T18:21:44.170 に答える
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;
    }
于 2013-02-08T13:13:01.737 に答える