137

新しい Google Maps API for Android では、マーカーを追加できますが、(簡単に) 削除する方法はありません。

私の解決策は、マーカーをマップに保持し、マーカーを削除したいときにマップを再描画することですが、あまり効率的ではありません。

private final Map<String, MarkerOptions> mMarkers = new ConcurrentHashMap<String, MarkerOptions>();

private void add(String name, LatLng ll) {
  final MarkerOptions marker = new MarkerOptions().position(ll).title(name);
  mMarkers.put(name, marker);

  runOnUiThread(new Runnable() {
    @Override
    public void run() {
      mMap.addMarker(marker);
    }
  });
}

private void remove(String name) {
  mMarkers.remove(name);

  runOnUiThread(new Runnable() {
    @Override
    public void run() {
      mMap.clear();

      for (MarkerOptions item : mMarkers.values()) {
        mMap.addMarker(item);
      }
    }
  });
}

誰かがより良いアイデアを持っていますか?

4

13 に答える 13

274

のメソッドシグネチャaddMarkerは次のとおりです。

public final Marker addMarker (MarkerOptions options)

したがって、マーカーのオプションを指定してマーカーをに追加するときは、(作成に使用したオブジェクトではなく)返されたオブジェクトをGoogleMap保存する必要があります。このオブジェクトを使用すると、後でマーカーの状態を変更できます。マーカーを使い終わったら、呼び出してマップからマーカーを削除できます。MarkerMarkerOptionsMarker.remove()

余談ですが、一時的に非表示にしたい場合は、を呼び出すことでマーカーの表示を切り替えることができますMarker.setVisible(boolean)

于 2012-12-03T22:23:08.490 に答える
39

このようにマーカーをマップに追加します

Marker markerName = map.addMarker(new MarkerOptions().position(latLng).title("Title"));

次に、 remove メソッドを使用できるようになります。そのマーカーのみが削除されます

markerName.remove();
于 2015-12-25T21:20:57.480 に答える
2

マーカーを追跡するグローバル変数を作成する

private Marker currentLocationMarker;

//古いマーカーを削除

            if (null != currentLocationMarker) {
                currentLocationMarker.remove();
            }

// 更新されたマーカーを追加してカメラを移動します

            currentLocationMarker = mMap.addMarker(new MarkerOptions().position(
                    new LatLng(getLatitude(), getLongitude()))
                    .title("You are now Here").visible(true)
                    .icon(Utils.getMarkerBitmapFromView(getActivity(), R.drawable.auto_front))
                    .snippet("Updated Location"));

            currentLocationMarker.showInfoWindow();
于 2017-01-11T08:50:45.210 に答える
1

1.マーカーを削除する場合は、次のように実行できmarker.remove(); ます。代わりに、次のように削除する代わりにマーカーを非表示にすることもできます。

 marker.setVisible(false);

後で必要なときにいつでも表示できるようにします。
2.ただし、マップからすべてのマーカーを削除する場合は、注意を使用します map.clear();
: etcmap.clear();も削除されますここで例を確認するか、それらをVisible false に設定し、そのような場合は使用しない でください。Polylines, Circles
Polylines, Circles map.clear();

于 2015-12-09T04:54:13.470 に答える
1

マップに追加するすべてのマーカーを含む配列を作成します。

後で、次を使用します。

Marker temp = markers.get(markers.size() - 1);
temp.remove();
于 2015-05-28T23:19:39.933 に答える