[英]How to clear the circle and marker from the Google Map v2 in android
我想在位置更改后立即在android的Google Map v2上绘制一个以center为当前位置的圆。 现在,我所看到的是,每次更改位置时,圆都会不断绘制(如果位置相同,则彼此重叠)而不会删除前一个圆。 标记也发生了同样的事情。
以下是我用来在Google Map v2上画圆的代码
@Override
public void onLocationChanged(Location location) {
if (location != null) {
// Create a LatLng object for the current location
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
// Show the current location in Google Map
map.moveCamera(CameraUpdateFactory.newLatLng(latLng));
// Zoom in the Google Map
map.animateCamera(CameraUpdateFactory.zoomTo(14));
CircleOptions circleOptions = new CircleOptions().center(latLng) // set center
.radius(1000) // set radius in meters
.fillColor(Color.TRANSPARENT) // default
.strokeColor(0x10000000).strokeWidth(5);
myCircle = map.addCircle(circleOptions);
map.addMarker(new MarkerOptions().position(latLng).title("You are here!"));
}
如何确定下一次绘制圆时,会从Google地图中清除上一个圆和标记。 我需要在代码中进行哪些更改?
任何帮助将不胜感激。
从地图中删除内容很简单。 无论出于何种原因,在GoogleMaps
v2中,您都无法简单地通过获取其ID来删除Marker
,因为该值是在创建时自动生成的,因此几乎没有用处。 要解决此问题,您要做的就是创建可以存储对要删除的对象的引用的内容。 一种实现方法是创建HashMap
并使用一些唯一的ID存储对您的Marker
,圆或您想要删除的其他任何内容的引用。 通过将对您放置在地图上的事物的引用存储在HashMap
但是您可以在每次位置更新时调用与该键关联的标记上的remove。 循环也是一样(尽管如果按照下面的方式设置类型,您将需要不同的HashMap
我不知道您是否可以使用将两者存储的通用String,Object映射)。
要使用此方法,请像实例变量一样声明HashMap
以便可以从Activity
所有方法中访问它
private HashMap<String, Marker> mapStuff = new HashMap<String, Marker>();
然后,无论您在哪里创建Marker
或其他地图对象,只需将它们添加到具有某些键值的HashMap
Marker dude = map.addMarker(new MarkerOptions()
.position(newLatLng(latitude, longitude))
.title(MARKER_TITLE)
.snippet(SNIPPET));
mapStuff.put("userMarker", dude);
这个概念实际上与另一个发布者所建议的相同,后者只是将Marker
作为实例变量并在其中存储引用。 两者都做同样的事情。 如果您要处理多个标记或对象,则HashMap
方法最有效。 如果只处理一个Marker
或一个圆,则单变量方法可能更正确,因为您不需要使用“ Collection
来添加或删除一个标记。 只需声明
private Marker userMarker;
然后在将Marker
添加到地图的位置存储参考
userMarker = map.addMarker(new MarkerOptions()
.position(newLatLng(latitude, longitude))
.title(MARKER_TITLE)
.snippet(SNIPPET));
更新位置时,可能在onLocationChanged
只需检查标记的存在并将其删除(如果存在)并重新添加
if(userMarker == null){
displayUserMarker(location);
} else {
userMarker.remove;
displayUserMarker(location);
}
map.clear();
在if(location!= null)之前添加
这样,每次位置更改时,所有标记和圆圈都会被删除并再次绘制
首先,像继续圈出一样,保持对标记的引用
myMarker = map.addMarker(new MarkerOptions().position(latLng).title("You are here!"));
当您想删除它们时,只需调用remove()
:
myCircle.remove();
myMarker.remove();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.