android - 如何动态更新特定的overlayitem

标签 android google-maps location overlay itemizedoverlay

我正在开发一个基于位置的 Android 应用程序,它处理大量的叠加项。

背景: 我想在 map 上显示很多实体。实体的坐标随着它们位置的变化而实时变化。对应于更新后的位置, map 上的实体也随之更新。实体可以增长到很大数量。

实现 我有两个叠加层。一个用于 MyLocationOverlay 以显示用户位置,另一个用于 ItemizedOverlay 子类,其中包含我需要在 map 上显示的所有实体。

问题 每当实体的位置发生变化时,需要更新相应的 overlayitem。问题是我不确定哪个是完成此任务的最佳方法。我有这些选择

  1. 当我收到特定实体的位置时,我从 map 上删除了所有叠加层并重新添加了叠加层。现在创建了一个叠加项,其位置已更新。

    List<Overlay> overlays = map.getOverlays();
    overlays.removeAll(overlays);
    overlays.add(new MyOverlay(marker,this));
    
  2. 我为每个实体创建了一个叠加层。这意味着我将创建 500 个叠加层,每个叠加层只包含一个叠加项。我创建了一个 Overlay 类的子类并添加了我自己的属性以明确标识实体并为每个实体创建一个。当我到达特定实体的位置更新时,我迭代并获取特定的覆盖项,将其删除并添加一个具有更新位置的新覆盖项。

我不知道哪个是最明智的使用性能。

我觉得当实体的数量超过 500 或 1000 时,为每个单个实体的每个位置更新(这可能很频繁)删除所有覆盖并重新添加所有覆盖变得相当大。

与此同时,遍历相同数量的实体的开销也可能相等。

任何关于选择哪一个或更好的实现方法的建议都将不胜感激。

/安迪

最佳答案

我认为最好的解决方案(关于性能)是创建一个继承自 Overlay 类的自定义 Overlay 类,这样您就可以按照自己的方式覆盖 onDraw 方法.看这个previous SO post了解如何去做。如果你想避免这种情况,你可以检查 ItemizedOverlay ,如果你还没有这样做的话。它比为每个实体创建一个 Overlay 更有效,但不如第一种方法建议的那样有效。

关于android - 如何动态更新特定的overlayitem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11540119/

相关文章:

android - ServiceConnection.onServiceDisconnected() 什么时候被调用?

android - Mockito 模拟在 Lollipop 或更高版本中运行实际的 Android 代码

Android Google Maps API V2 - 在 map 上标记区域

ios - 应用访问 map 服务时系统弹出UIAlertView,可以更改UIAlertView的消息吗?

android - 滚动/粘性 FAB float 操作按钮 android

android - 尝试在 Android 手机上使用 RenderScript 支持库模糊图像时出错

javascript - 检查鼠标是否位于标记 Google Maps API 上

google-maps - 如何将HeatMaps添加到Flutter Mobile应用程序

flutter - 如何使用 flutter compass 找到方向?

IOS后台定位服务,因时而异