【问题标题】:How to clear the circle and marker from the Google Map v2 in android如何从Android中的Google Map v2中清除圆圈和标记
【发布时间】:2013-05-22 01:49:33
【问题描述】:

我正在尝试在 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 地图中清除之前的圆圈和标记。我需要对我的代码进行哪些更改?

任何帮助将不胜感激。

【问题讨论】:

    标签: java android google-maps-api-2


    【解决方案1】:

    从地图上移除东西很简单。无论出于何种原因,在GoogleMaps v2 中,您不能简单地通过获取其 id 来删除Marker,因为该值是在创建时自动生成的,因此几乎没有用。要解决此问题,您需要做的就是创建一些可以存储对要删除的对象的引用的东西。一种方法是创建HashMap 并存储对您的Marker、圈子或您希望能够删除的任何其他内容的引用,并带有一些唯一的ID。通过在HashMap 中存储对您在地图上放置的事物的引用,然后您可以在每次更新位置时在与该键关联的标记上调用 remove。圆圈也是如此(尽管如果您按照我在下面设置的类型设置类型,您将需要不同的HashMap - 我不知道您是否可以使用通用的字符串、对象映射来存储两者)。

    要使用此方法,请将 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);
    }
    

    【讨论】:

    • 感谢 Rarw 的建议。任何例子都会让我更了解这一点。
    【解决方案2】:
    map.clear();
    

    在 if (location != null) 之前添加这个

    这样每次位置变化时,所有的标记和圆圈都会被移除并重新绘制

    【讨论】:

      【解决方案3】:

      首先,保持对标记的引用,就像你保持圆圈一样

      myMarker = map.addMarker(new MarkerOptions().position(latLng).title("You are here!"));
      

      当您想删除它们时,只需致电remove()

      myCircle.remove();
      myMarker.remove();
      

      【讨论】:

        猜你喜欢
        • 2013-05-27
        • 2014-11-02
        • 2015-02-13
        • 1970-01-01
        • 2016-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-14
        相关资源
        最近更新 更多