如何在 android 上使用 google maps api v2 很好地管理标记

Posted

技术标签:

【中文标题】如何在 android 上使用 google maps api v2 很好地管理标记【英文标题】:How to manage Markers well using google maps api v2 on android 【发布时间】:2015-08-19 19:46:33 【问题描述】:

我正在尝试实现应用程序,您可以在其中添加自己的标记,该标记将获得关闭时间。为此,我需要知道如何管理我的标记。假设我有分配了唯一 ID 的用户数组列表。

    private ArrayList<User> userList = new ArrayList<>();

然后我将创建标记数组列表,其中包含纬度、经度、标题、所有者 ID 和截止日期等信息。

    private ArrayList<MyMarker> mMarkersArray = new ArrayList<MyMarker>();

接下来每当用户激活添加标记方法时,新标记将被推送到我的标记列表中。从思想上讲,一切似乎都很好,很容易,而且创建新对象看起来像这样:

    Marker mMarker = mMap.addMarker(new MarkerOptions() (...) );

但在管理特定标记时,我似乎遗漏了一些东西。会有一些触发方法会检查所有标记的截止日期(或者更确切地说是“按截止日期排序”列表中的第一个),然后它应该删除(不是隐藏,因为我认为从内存的角度来看它效率低下)。如何做到这一点?我无法将一些自定义变量(如 ID)添加到标记中(这样我就可以找到我感兴趣的变量),我有点迷路了。

有一种方法可以通过清除整个地图然后再次渲染除非活动标记之外的所有标记来实现这一点,但就我而言,它的效率非常低,必须有更好的解决方案。

【问题讨论】:

在 java 中,您不能将自定义变量添加到现有对象。但是您可以通过子类化 Marker 类来制作自定义 Marker 类,您阅读了 this page 关于如何 extends 一个类。或者,您可以使用HashMap 来存储您的标记而不是列表。 HashMap中的每一对,你可以设置你的Marker为key,截止日期为value 假设我在我的 HashMap 中找到了有趣的标记,我想删除它而不清除整个地图并从 HashMap 渲染所有标记(非常低效)。如何做到这一点? 【参考方案1】:

如果您想从地图中删除特定标记,您只需拨打remove()。方法。

从 MapView 和 HashMap 中删除标记的示例代码:

 for (Marker marker : hm.keySet()) 
      if (hm.get(marker).equals(deadline)) 
        marker.remove();
        hm.remove(marker);
      
  

你不需要清除整个 MapView,如果你只是在特定标记上调用 remove() 方法。

【讨论】:

@Kostek,我的回答能解决你的问题吗?如果是这样,您可以将我的答案标记为已接受吗?谢谢。

以上是关于如何在 android 上使用 google maps api v2 很好地管理标记的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 上获取 google 用户名?

如何在 Android 上的 Google 地图上的标记旁边显示标签?

如何使用 android 使用日历 API 在谷歌日历上添加事件?

import com.google.android.maps.geopoint 无法解析

如何通过滑行在 Google 地图上的 infoWindow 中获取图像 - Android

如何使用 android 手机上的本地 Google Maps .html 文件平移到当前位置?