2

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 個の円 (100 個の円の 5 つの配列) を描画するため、アプリは非常に遅くなります。

各円を単一のオーバーレイとして描画する代わりに、スポットの各テーブルを単一のオーバーレイとして描画する方法はありますか? たとえば、配列の 100 個の円を 1 つのオーバーレイとして描画すると、500 個のオーバーレイ (配列の円) ではなく、5 個のオーバーレイ (5 つの配列) になります。

もしそうなら、それはよりメモリ効率が良いでしょうか?
そうでない場合、デバイスのメモリをすべて消費せずにこれらの円を描画するためのベスト プラクティスは何ですか?

このメソッドを呼び出すたびに、より高い zIndex を指定します。これが何らかの形でメモリに影響を与えているかどうかはわかりません。ご協力ありがとうございました。

編集:

OK、以下の回答のアルゴリズムは、ドローアブルでグラウンドオーバーレイを描画するこのスレッドとともに、私の問題を解決するのに役立ちました: Ground Overlay

ご協力いただきありがとうございます!

4

2 に答える 2