5

作成中のAndroidアプリケーションにGooglemapsv2 apiを使用しています。このアプリケーションでは、マップ上にポリゴンを描画する必要があります。ポリゴンの数が少ない場合はすべて正常に機能し、ポリゴンの数が多い場合はマップの読み込みが遅くなり、パンとズームが非常に遅くなります。SupportMapFragmentを使用して、次のようなポリゴンを追加しています。

    for(PolygonOptions item : items) { 
            getMap().addPolygon(poly);
    }

多数のポリゴンのパフォーマンスを向上させる方法はありますか?

4

2 に答える 2

1

また、頂点の読み込みと組み立てに時間がかかるため、バックグラウンドでマップ上に多くのポリゴンを描画したいと考えています。私にとってうまくいった解決策は、AsyncTask にデータをロードし、各ポリゴンのポイントを onProgressUpdate メソッドのメイン UI のメソッドに読み戻すときに渡すことでした。

private class AddZonesTask extends AsyncTask<Zone, Zone, Integer> {
  protected Integer doInBackground(Zone... zones) {
    for (Zone zone : zones) {
      Cursor cursor = provider.query( .... );
      List<Points> points = cursorToPointsMethod(cursor);
      zone.add(points);
      publishProgress(zone);
    }
  return zones.length;
  }

  protected void onProgressUpdate(Zone... zones) {
    drawBorder(zones[0]);
  }

  protected void onPostExecute(Integer result) { }
}

次に、メイン UI の drawBorder がそれらをマップ オブジェクトに追加します。

于 2013-02-05T20:56:36.167 に答える
0

Bobbake4 は正しいです。Android では、addPolygon がメイン スレッド上にある必要があります。私も同様の問題を抱えています。doInBackground現在、asynctask を実装していますが、現在のコードから addPolygon を実行する方法はないようです。

    private class AddPolygonToMap extends
        AsyncTask<String, Integer, ArrayList<PolygonOptions>> {

    @Override
    protected ArrayList<PolygonOptions> doInBackground(String... urls) {
        publishProgress(1);
        return drawPolygonWithPage(urls[0]);
    }

    @Override
    protected void onProgressUpdate(Integer... progress) {
        int value = progress[0] + progressBar.getProgress();
        progressBar.setProgress(value);
    }

    @Override
    protected void onPostExecute(ArrayList<PolygonOptions> result) {
        for (int i = 0; i < result.size(); i++) {
            map.addPolygon(result.get(i));
        }
    }
}

理想的には、addPolygon の背景を希望します...これを行う他の方法はありますか?

于 2013-02-01T18:10:13.607 に答える