web-dev-qa-db-ja.com

Google Maps v2 MarkerzOrdering-トップに設定

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

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

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

ポリゴンをzOrderedできることは知っていますが、スタイルの良いグラフィックを好むでしょう。

実際、マーカーの上にポリゴンを注文することはできません。

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

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

23
Aiden Fry

完璧な解決策ではありませんが! 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;
    }
1
Aiden Fry

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を処理する他の方法は見つかりませんでした。

41
Bastien Beurier

これはGoogle Play Services 9.22016年6月27日 )で追加されました

New MarkerOptions.zIndex() は、マップ上の他のマーカーとの関係でマーカーのスタック順序を設定します。 マーカーz-indexes およびクリックイベントに対するz-indexの影響についての詳細をお読みください。 ( 問題4688

18
passsy