我正在尝试在带有支持库的 Android 上使用 APIv2 在 GoogleMap 上绘制几个点。我有几个 SPOT 对象数组,包含所述点的纬度和经度。每次我想在地图上绘制点时,我都会调用以下方法:
public void drawSpotsFromArray(ArrayList<Spot> pSpots, int pZIndex) {
for (int i=0; i<pSpots.size(); i++) {
Spot lSpot = pSpots.get(i);
double lDiameter = 10;
CircleOptions lCircleOptions = new CircleOptions();
lCircleOptions.center(new LatLng(lSpot.mLatitude, lSpot.mLongitude));
lCircleOptions.radius(lDiameter);
lCircleOptions.strokeColor(Color.BLACK);
lCircleOptions.strokeWidth(5);
lCircleOptions.fillColor(Color.WHITE);
lCircleOptions.zIndex(pZIndex);
mGoogleMap.addCircle(lCircleOptions);
}
}
它只是绘制数组中包含的每个点。
现在,我的问题是这些数组非常大,导致内存过载。我画了大约 500 个圆圈(5 个 100 个圆圈的数组),所以应用程序变得非常慢。
有没有办法,而不是将每个圆圈绘制为单个叠加层,而是将每个点表绘制为单个叠加层?例如,将一个数组的 100 个圆圈绘制为一个叠加层,导致 5 个叠加层(5 个数组)而不是 500 个叠加层(数组的圆圈)。
如果是这样,它会更节省内存吗?
如果不是,那么在不消耗所有设备内存的情况下绘制这些圆圈的最佳做法是什么?
每次调用此方法时,我都会给出更高的 zIndex。我不知道这是否会以任何方式影响内存。谢谢您的帮助。
编辑:
好的,下面答案中的算法帮助我解决了我的问题,以及这个线程来绘制带有可绘制对象的地面覆盖: Ground Overlay
谢谢你的帮助!