以下
パスを作成するには、2つのマーカーの間に多数のポリラインを追加する必要がありました。
マーカーの1つはドラッグ可能です。たとえば、ソースはドラッグ可能です。
そのため、ユーザーがマーカーのドラッグを開始すると、以前に描画したパスを消去し、新しいソースとデスティネーションの間の新しいパスを描画する必要があります。
新しいパスを描画できますが、前のパスを消去するにはどうすればよいですか?
これがパスの描画方法です。
for (int z = 0; z < list.size() - 1; z++) {
LatLng src = list.get(z);
LatLng dest = list.get(z + 1);
Polyline line = map.addPolyline(new PolylineOptions()
.add(new LatLng(src.latitude, src.longitude),
new LatLng(dest.latitude, dest.longitude))
.width(2).color(Color.RED).geodesic(true));
}
私が得ることができる1つのソリューションは
map.clear();
すべてのポリライン、マーカーなどをクリアし、マーカーを再度追加してから、パスを描画します。
しかし、ドラッグを開始するとすぐにマーカーがクリアされるため、マップ上に表示されません:(
ありがとうございました
マップに追加するポリラインを追跡します。
Polyline polyline = this.mMap.addPolyline(new PolylineOptions().....);
次に、それを削除したい場合:
polyline.remove();
ポリラインがたくさんある場合は、マップに配置されたリストに追加します。
List<Polyline> polylines = new ArrayList<Polyline>();
for(....)
{
polylines.add(this.mMap.addPolyline(new PolylineOptions()....));
}
そして、あなたが削除したいとき:
for(Polyline line : polylines)
{
line.remove();
}
polylines.clear();
重要なのは、Polylineオブジェクトへの参照を保持し、各オブジェクトで.remove()を呼び出すことです。
これは非常に古い質問ですが、これは非常に一般的なニーズであることに気付きました。別の方法を見つけて、それを共有したいと思いました。
基本的な考え方は次のとおりです。
Polyline polylineFinal;
PolylineOptions polylineOptions;
loop {
polylineOptions.add( new LatLng( latitude, longitude ) );
}
polylineOptions.width(2);
polylineOptions.color(Color.RED);
polylineOptions.geodesic(true);
polylineFinal = map.addPolyline (polylineOptions);
マップの「addPolyline」メソッドは、すべてのポイントを含む単一のポリラインを返します。ポイントを削除する必要がある場合、polylineFinalの「remove」メソッドを呼び出します。
polylineFinal.remove();