Jon*_*nas 109 android google-maps
在适用于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);
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
有没有人有更好的主意?
Ant*_*ony 238
方法签名addMarker
是:
public final Marker addMarker (MarkerOptions options)
Run Code Online (Sandbox Code Playgroud)
因此,当您GoogleMap
通过指定标记的选项向a添加标记时,应该保存Marker
返回的MarkerOptions
对象(而不是用于创建它的对象).此对象允许您稍后更改标记状态.完成标记后,您可以调用Marker.remove()
将其从地图中删除.
另外,如果您只想暂时隐藏它,可以通过调用来切换标记的可见性Marker.setVisible(boolean)
.
小智 25
清除地图中的所有涂鸦使用
map.clear()
Run Code Online (Sandbox Code Playgroud)
小智 25
像这样将标记添加到地图中
Marker markerName = map.addMarker(new MarkerOptions().position(latLng).title("Title"));
Run Code Online (Sandbox Code Playgroud)
然后你就可以使用remove方法了,它只会删除那个标记
markerName.remove();
Run Code Online (Sandbox Code Playgroud)
小智 8
如果您使用 Kotlin 语言,则只需添加以下代码:
创建GoogleMap
和Marker
类型的全局变量。
我使用变量标记使变量标记值可以直接更改
private lateinit var map: GoogleMap
private lateinit var marker: Marker
Run Code Online (Sandbox Code Playgroud)
我使用这个函数/方法在我的地图上添加标记:
private fun placeMarkerOnMap(location: LatLng) {
val markerOptions = MarkerOptions().position(location)
val titleStr = getAddress(location)
markerOptions.title(titleStr)
marker = map.addMarker(markerOptions)
}
Run Code Online (Sandbox Code Playgroud)
创建函数后,我将此代码放在onMapReady()
删除标记并创建一个新标记上:
map.setOnMapClickListener { location ->
map.clear()
marker.remove()
placeMarkerOnMap(location)
}
Run Code Online (Sandbox Code Playgroud)
如果您想在单击标记时显示地址位置,请添加此代码以隐藏和显示标记地址,但您需要一种方法来获取地址位置,这是额外的好处。我从这篇文章中获得了代码:如何从纬度和经度获取完整的地址?
map.setOnMarkerClickListener {marker ->
if (marker.isInfoWindowShown){
marker.hideInfoWindow()
}else{
marker.showInfoWindow()
}
true
}
Run Code Online (Sandbox Code Playgroud)
小智 6
如果存在标记,则删除最后一个标记。如果标记不存在创建当前标记
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)));
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
94280 次 |
最近记录: |