我试图在Android中的Google Map v2上绘制一个圆圈,当中心位置发生变化时,将中心作为当前位置。现在我所看到的是,每当位置变化时,圆圈不断被绘制(如果位置相同则相互重叠)而不删除前一个圆圈。 Marker也是如此。
以下是我用于在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地图中清除上一个圆圈和标记。我需要在代码中做出哪些更改?
任何帮助将不胜感激。
答案 0 :(得分:2)
从地图中删除内容很简单。无论出于何种原因,在GoogleMaps
v2中,您不能通过获取其ID来删除Marker
,因为该值在创建时自动生成,因此几乎无用。要解决此问题,您需要做的就是创建一些可以存储对要删除的对象的引用的东西。一种方法是创建HashMap
并存储对Marker
,圈子或您希望删除的任何其他内容的引用,以及一些唯一ID。通过在HashMap
中存储您放置在地图上的内容的引用,然后每次您的位置更新时,您都可以在与该键相关联的标记上调用remove。对于圆圈也是如此(如果你按照下面的方式设置类型,你将需要一个不同的HashMap
- 我不知道你是否可以使用通用的String,它将存储两者的对象图。) / p>
要使用此方法,请将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);
}
答案 1 :(得分:1)
map.clear();
在if(location!= null)
之前添加因此,每次位置更改时,所有标记和圆圈都会被移除并再次绘制
答案 2 :(得分:0)
首先,保持对标记的引用,就像保持圆圈一样
myMarker = map.addMarker(new MarkerOptions().position(latLng).title("You are here!"));
如果要删除它们,只需拨打remove()
:
myCircle.remove();
myMarker.remove();