2013-01-22 71 views
5

我正在使用Google maps v2 API作爲我正在構建的Android應用程序,它必須在地圖上繪製多邊形。當多邊形的數量很少時,一切正常,當數字較大時,地圖加載緩慢,平移和縮放非常慢。我使用SupportMapFragment和添加多邊形是這樣的:安卓谷歌地圖v2多邊形性能問題?

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

有沒有什麼辦法來提高對大量多邊形的表現呢?

+0

據我所知,這個進程必須在主線程中執行,而不是在單獨的Thread或AsyncTask中執行。如果您的代碼中未使用Thread(使用Handler)或AsyncTask類,則必須提前使用它們的implements。 – BBonDoo

+2

它實際上是從主線程調用addPolygon的要求。當從後臺線程調用addPolygon時,maps API將拋出IllegalStateException,因爲它不在主線程上。 – Bobbake4

+0

@ Bobbake4你解決了你的問題嗎?我有同樣的問題,如果你找到解決方案,請告訴我 –

回答

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背景...有沒有得到任何其他方式這樣做?

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然後將它們添加到地圖對象中。