如何动态更新特定的overlayitem

and*_*ndy 6 android location google-maps overlay itemizedoverlay

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

背景: 我想在地图上显示很多实体.实体的坐标随着位置的变化而实时变化.对应于更新的位置,实体应在地图上更新.实体可以增长到很多.

实施 我有两个叠加.一个用于显示用户位置的MyLocationOverlay,另一个用于显示我需要在地图上显示的所有实体的ItemizedOverlay子类.

问题 每当实体的位置发生变化时,都需要更新相应的重叠项.问题是我不确定哪种方法是最好的方法.我有这些选择

  1. 当我收到特定实体的位置时,我会从地图中删除所有叠加层并重新添加叠加层.现在使用更新的位置创建其中一个叠加层.

    List<Overlay> overlays = map.getOverlays();
    overlays.removeAll(overlays);
    overlays.add(new MyOverlay(marker,this));
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我为每个实体创建了一个叠加层.意思是我将创建500个叠加层,每个叠加层只包含一个叠加层项目.我创建了一个Overlay类的子类,并添加了我自己的属性来清楚地标识实体并为每个实体创建一个.当我到达特定实体的位置更新时,我迭代并获取特定的覆盖项,删除它并添加一个具有更新位置的新项.

我不知道哪个是最好的使用性能.

当实体数量超过500或1000时,我觉得删除所有并重新添加每个单个实体的每个单一位置更新(可能经常)的所有叠加都会成为相当大的开销.

同时,迭代相同数量的实体也可能是相同的开销.

任何可供选择的建议或更好的实施方法都将受到赞赏.

/安迪

Ang*_*elo 1

我相信最好的解决方案(关于性能)是创建一个继承自Overlay类的自定义 Overlay 类,以便您可以按照onDraw您想要的方式重写该方法。请参阅之前的 SO 帖子以了解如何做到这一点。如果你想避免这种情况,你可以检查 ItemizedOverlay 如果你还没有这样做的话)。它比Overlay为每个实体创建一个更有效,但不如第一种方法建议的那么有效。

  • 我相信没有明确的答案,因为这取决于自定义覆盖类的实现。如果我想确定性能,我将为这两种方法实现一个简单的测试用例,看看哪一种具有最佳性能。 (3认同)