我正在使用Google maps v2 api来构建我正在构建的Android应用程序,它必须在地图上绘制多边形。当多边形的数量很小时,一切正常,当数字较大时,地图加载缓慢,平移和缩放非常慢。我正在使用SupportMapFragment并添加如下多边形:
for(PolygonOptions item : items) {
getMap().addPolygon(poly);
}
有没有办法提高大量多边形的性能?
答案 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背景......还有其他方法可以完成这项工作吗?