太多(可能超过 10,000 个)绘制的多边形滞后于谷歌地图

Sam*_*Sam 5 android google-maps

目前在我的应用程序中,通过一个一个地绘制每个多边形正方形并用颜色填充它,在地图上绘制了一个“网格”。然后,我将多边形对象添加到地图中,以便稍后根据需要进行修改。

我只创建每个多边形一次,但是我添加的越多(可能数以万计),就会出现主要的一致“滞后”和低帧速率,最终破坏了应用程序。

这是创建每个“Square”并将其添加到哈希图的代码的当前部分。

double latScale = 0.000180;
double lngScale = 0.000288;

PolygonOptions po = new PolygonOptions()
        .add(   new LatLng(lat, lng),
                new LatLng(lat, lng + lngScale),
                new LatLng(lat - latScale, lng + lngScale),
                new LatLng(lat - latScale, lng))
        .strokeWidth(3f)
        .strokeColor(Color.argb(220, 0, 0, 0));

if (colors.containsKey(color)){
    po.fillColor(colors.get(color));
}
else{
    po.fillColor(colors.get("default"));
}

gridSquares.put(square_id, mMap.addPolygon(po));
Run Code Online (Sandbox Code Playgroud)

我的问题是,究竟是什么导致它滞后这么多(我意识到它一定是绝对数量,但我需要细节,重新绘制每一帧?内存?)我怎么能在某些情况下满足我对这个巨大网格覆盖的需求?不那么滞后的方式。要么用我目前的思路,要么用一种新的方式。

如果需要更多说明,请询问。

Sam*_*Sam 3

我最终所做的效果非常好的事情是

  1. 在谷歌地图中为我需要的每个多边形使用GroundOverlay,为每个多边形使用小分辨率图像(30x30,但是如果您只需要一种颜色,则可以是1x1),而不是绘制每个多边形。这大大提高了性能。

  2. 调用 OnCameraIdleListener 将每个 GroundOverlay 设置为可见或不可见,具体取决于当时它是否在屏幕视图中。我最终在屏幕周围使用了一个小缓冲区,以使叠加层在该区域也可见。