Android 从谷歌地图上删除标记
在Android新的谷歌地图API中,我们可以,但没有办法(轻松)删除一个 我的解决方案是将标记保留在地图中,并在需要删除标记时重新绘制地图,但这不是很有效Android 从谷歌地图上删除标记,android,google-maps,Android,Google Maps,在Android新的谷歌地图API中,我们可以,但没有办法(轻松)删除一个 我的解决方案是将标记保留在地图中,并在需要删除标记时重新绘制地图,但这不是很有效 private final Map mMarkers=new ConcurrentHashMap(); 专用void add(字符串名称,LATLL){ final MarkerOptions marker=新MarkerOptions().position(ll).title(name); mMarkers.put(名称、标记); run
private final Map mMarkers=new ConcurrentHashMap();
专用void add(字符串名称,LATLL){
final MarkerOptions marker=新MarkerOptions().position(ll).title(name);
mMarkers.put(名称、标记);
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
mMap.addMarker(marker);
}
});
}
私有无效删除(字符串名称){
m标记。删除(名称);
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
mMap.clear();
对于(标记选项项:mMarkers.values()){
mMap.添加标记(项目);
}
}
});
}
有人有更好的主意吗?签名的方法是:
因此,当您通过指定标记的选项将标记添加到GoogleMap
时,您应该保存返回的对象(而不是用于创建它的MarkerOptions
对象)。此对象允许您稍后更改标记状态。完成标记后,可以调用将其从地图中删除
另外,如果您只想暂时隐藏标记,可以通过调用来切换标记的可见性。要清除地图中的所有涂鸦,请使用
map.clear()
使用外接程序地图上的所有标记创建阵列 稍后,请使用:
Marker temp = markers.get(markers.size() - 1);
temp.remove();
1。如果要删除标记,可以按
marker.remove()操作代码>
或者,也可以隐藏标记,而不是将其删除
marker.setVisible(false);
并在以后需要时使其可见。
2。但是,如果要从地图中删除所有标记,请使用map.clear()代码>
注意:map.clear()代码>还将删除多段线、圆等。
3.如果不想删除多段线、圆等,请使用标记长度的循环(如果有多个标记)来删除这些或将其设置为可见假,并且不要使用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)));
}
创建一个全局变量以跟踪标记
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();
使用以下代码:
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
marker.remove();
return true;
}
});
一旦你点击“一个标记”
,你就可以删除它。只是一个便条,我今晚花了好几个小时才找到的东西
如果你因为某种原因决定抓住一个标记,在你从地图上移除它之后。。。getTag将返回NULL,即使剩余的get值将与创建标记时设置的值一起返回
如果删除标记,然后尝试引用它,则标记值将设置为NULL
对我来说似乎是个bug…如果使用Kotlin语言,只需添加以下代码:
创建GoogleMap
和Marker
类型的全局变量
我使用变量标记使变量标记值可以直接更改
private lateinit var map: GoogleMap
private lateinit var marker: Marker
我使用此函数/方法在地图上添加标记:
private fun placeMarkerOnMap(location: LatLng) {
val markerOptions = MarkerOptions().position(location)
val titleStr = getAddress(location)
markerOptions.title(titleStr)
marker = map.addMarker(markerOptions)
}
创建函数后,我将此代码放在onMapReady()
上,以删除标记并创建一个新标记:
map.setOnMapClickListener { location ->
map.clear()
marker.remove()
placeMarkerOnMap(location)
}
如果您希望在单击标记时显示地址位置,则可以添加此代码以隐藏和显示标记地址,但您需要一种获取地址位置的方法。我从这篇文章中得到了代码:
对于遵循此项目示例的用户,您可以通过这样做来删除标记
override fun onMapReady(googleMap: GoogleMap?) {
googleMap?.apply {
// Remove marker
clear()
val sydney = LatLng(-33.852, 151.211)
addMarker(
MarkerOptions()
.position(sydney)
.title("Marker in Sydney")
)
moveCamera(CameraUpdateFactory.newLatLng(sydney))
}
}
试试这个,它正在更新当前位置,效果很好
public void onLocationChanged(@NonNull Location){
//这里我们更新地图上的位置
LatLng myActualLocation=新LatLng(location.getLatitude(),location.getLength());
如果(markerName!=null){//marker name被声明为gloval变量。
markerName.remove();
}
markerName=mMap.addMarker(新的MarkerOptions().position(myActualLocation).title(“Marker”).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE));
//mMap.addMarker(新的MarkerOptions().position(myActualLocation).title(“Marker”).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(myActualLocation,18));
}
这将清除地图上的所有覆盖,而不仅仅是问题所指的标记。这对我不起作用。marker.setVisible(false)、marker.remove()甚至markerManager.remove(marker)都不会影响映射。标记仍然存在。有什么提示吗?如果您决定检查标记的值,请参阅下面我关于保留标记的评论,而标记从地图中删除后几乎没有任何用处。。Remove方法将标记值设置为null…聪明!谢谢为什么要使用Runnable()添加标记?要在UI线程上添加标记,请使用mMap.clear()清除所有标记
map.setOnMarkerClickListener {marker ->
if (marker.isInfoWindowShown){
marker.hideInfoWindow()
}else{
marker.showInfoWindow()
}
true
}
override fun onMapReady(googleMap: GoogleMap?) {
googleMap?.apply {
// Remove marker
clear()
val sydney = LatLng(-33.852, 151.211)
addMarker(
MarkerOptions()
.position(sydney)
.title("Marker in Sydney")
)
moveCamera(CameraUpdateFactory.newLatLng(sydney))
}
}