Android Google Maps v2多边形性能问题?

时间:2013-01-22 22:19:52

标签: java android google-maps google-maps-api-2

我正在使用Google maps v2 api来构建我正在构建的Android应用程序,它必须在地图上绘制多边形。当多边形的数量很小时,一切正常,当数字较大时,地图加载缓慢,平移和缩放非常慢。我正在使用SupportMapFragment并添加如下多边形:

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

有没有办法提高大量多边形的性能?

2 个答案:

答案 0 :(得分: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将它们添加到地图对象中。

答案 1 :(得分:0)

Bobbake4是正确的。 Android要求addPolygon位于主线程上。我也有类似的问题。 目前我正在实现asynctask,但似乎没有办法从doInBackground执行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背景......还有其他方法可以完成这项工作吗?