新しいAndroid用Google Maps APIでは、 マーカーを追加 を使用できますが、マーカーを(簡単に)削除する方法はありません。
私の解決策は、マーカーをマップ内に保持し、マーカーを削除するときにマップを再描画することですが、あまり効率的ではありません。
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);
}
}
});
}
誰かがより良いアイデアを持っていますか?
addMarker
のメソッドシグネチャは次のとおりです。
public final Marker addMarker (MarkerOptions options)
そのため、マーカーのオプションを指定してGoogleMap
にマーカーを追加する場合、(作成に使用したMarker
オブジェクトの代わりに)返される MarkerOptions
オブジェクトを保存する必要があります。このオブジェクトを使用すると、後でマーカーの状態を変更できます。マーカーの使用が終了したら、 Marker.remove()
を呼び出して、マップからマーカーを削除できます。
余談ですが、一時的に非表示にするだけの場合は、 Marker.setVisible(boolean)
を呼び出してマーカーの表示を切り替えることができます。
マップ内のすべての落書きをクリアする
map.clear()
このようなマップにマーカーを追加します
Marker markerName = map.addMarker(new MarkerOptions().position(latLng).title("Title"));
その後、removeメソッドを使用できるようになります。それはそのマーカーのみを削除します
markerName.remove();
マーカーが存在する場合、最後のマーカーを削除します。マーカーが存在しない場合、現在のマーカーを作成します
Marker currentMarker = null;
if (currentMarker!=null) {
currentMarker.remove();
currentMarker=null;
}
if (currentMarker==null) {
currentMarker = mMap.addMarker(new MarkerOptions().position(arg0).
icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
}
次のコードを使用します。
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
marker.remove();
return true;
}
});
"a marker"をクリックすると、削除できます。
1。マーカーを削除する場合は、marker.remove();
としてマーカーを削除できます。代わりに、マーカーを削除する代わりにマーカーを非表示にすることもできます
marker.setVisible(false);
必要なときにいつでも表示できるようにします。
2。ただし、マップからすべてのマーカーを削除する場合使用map.clear();
注:map.clear();
はPolylines, Circles
なども削除します。
。Polylines, Circles
などを削除したくない場合は、マーカーの長さまでループを使用して(複数のマーカーがある場合)、それらを削除します ここで例を確認してくださいまたはそれらをVisible falseに設定し、そのような場合はmap.clear();
を使用しないでください。
ただのメモ、私が今夜何時間も追跡していたもの...
何らかの理由でマーカーを保持することに決めた場合、マップからマーカーを削除した後、残りのget値は、マーカーが作成されたときに設定した値で返されますが、getTagはNULLを返します。 。
マーカーを削除してから参照しようとすると、TAG値はNULLに設定されます。
私にはバグのようです...
マップに追加するすべてのマーカーで配列を作成します。
後で使用します:
Marker temp = markers.get(markers.size() - 1);
temp.remove();
マーカーを追跡するグローバル変数を作成します
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();