我正在将Google maps v2 api 用于我正在构建的必须在地图上绘制多边形的 Android 应用程序。当多边形数量较少时,一切正常,当多边形数量较大时,地图加载缓慢并且平移和缩放非常慢。我正在使用 SupportMapFragment 并添加如下多边形:
for(PolygonOptions item : items) {
getMap().addPolygon(poly);
}
有什么方法可以提高大量多边形的性能?
我正在将Google maps v2 api 用于我正在构建的必须在地图上绘制多边形的 Android 应用程序。当多边形数量较少时,一切正常,当多边形数量较大时,地图加载缓慢并且平移和缩放非常慢。我正在使用 SupportMapFragment 并添加如下多边形:
for(PolygonOptions item : items) {
getMap().addPolygon(poly);
}
有什么方法可以提高大量多边形的性能?
我还想在背景的地图上绘制许多多边形,因为加载和组装顶点需要时间。对我有用的解决方案是在 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 将它们添加到地图对象中。
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 背景......还有其他方法可以完成这项工作吗?