我正在使用Google maps v2 API作爲我正在構建的Android應用程序,它必須在地圖上繪製多邊形。當多邊形的數量很少時,一切正常,當數字較大時,地圖加載緩慢,平移和縮放非常慢。我使用SupportMapFragment和添加多邊形是這樣的:安卓谷歌地圖v2多邊形性能問題?
for(PolygonOptions item : items) {
getMap().addPolygon(poly);
}
有沒有什麼辦法來提高對大量多邊形的表現呢?
我正在使用Google maps v2 API作爲我正在構建的Android應用程序,它必須在地圖上繪製多邊形。當多邊形的數量很少時,一切正常,當數字較大時,地圖加載緩慢,平移和縮放非常慢。我使用SupportMapFragment和添加多邊形是這樣的:安卓谷歌地圖v2多邊形性能問題?
for(PolygonOptions item : items) {
getMap().addPolygon(poly);
}
有沒有什麼辦法來提高對大量多邊形的表現呢?
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背景...有沒有得到任何其他方式這樣做?
我也想在背景上在地圖上繪製很多多邊形,因爲加載和組裝頂點需要時間。對我而言,解決方案是將數據加載到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然後將它們添加到地圖對象中。
據我所知,這個進程必須在主線程中執行,而不是在單獨的Thread或AsyncTask中執行。如果您的代碼中未使用Thread(使用Handler)或AsyncTask類,則必須提前使用它們的implements。 – BBonDoo
它實際上是從主線程調用addPolygon的要求。當從後臺線程調用addPolygon時,maps API將拋出IllegalStateException,因爲它不在主線程上。 – Bobbake4
@ Bobbake4你解決了你的問題嗎?我有同樣的問題,如果你找到解決方案,請告訴我 –