目前在我的应用中,一个'网格'通过逐个绘制每个多边形正方形并用颜色填充它来绘制到地图上。然后,我将多边形对象添加到地图中,以便稍后进行修改。
我只创建一次多边形,但是存在一个主要的一致性延迟'我加的越多(可能有数万个),帧率越低,最终打破了应用程序。
这是代码的当前部分,用于创建和添加每个' Square'到一个hashmap。
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));
我的问题是,究竟是什么导致它滞后这么多(我意识到它必须是绝对数量,但我需要细节,重新绘制每一帧?记忆?)我怎样才能满足我对这个巨大网格的需求以某种方式叠加,并没有太多滞后。无论是我目前的思路还是新方式。
如果需要进一步澄清,请询问。
答案 0 :(得分:2)
我最终做的最好的工作是
在谷歌地图中为我需要的每个多边形使用GroundOverlay,使用小分辨率图像(30x30,但如果你只需要一种颜色,这可能是1x1),而不是每个多边形。这提高了性能。
调用OnCameraIdleListener将每个GroundOverlay设置为可见或不可见,具体取决于它是否在该点的屏幕视图中。我最终在屏幕周围使用了一个小缓冲区,以便在此区域中显示叠加层。
答案 1 :(得分:0)
我认为你应该从自定义磁贴提供程序开始。
我根据这篇文章写了类似的东西:
Google Maps API v2 draw part of circle on MapFragment
使用这种方法在地图上显示大约1000条折线是平滑的。