2017-05-02 74 views
0

的問題是,地圖上沒有得到每次我試着畫出不同的路線,所以我得到的另一個的上面畫一個路線清除。清除路徑 - 安卓

我已經花了太多時間試圖解決它。在測試了其他用戶的建議之後,似乎沒有任何工作。 這基本上是我試過的:

  • 我打電話googleMap.clear()方法

  • 我還保持每個折線參考添加在地圖上調用後來polyline.remove()方法時繪製一條新路線。

我有從數據庫retreiving數據的Web服務,則返回ArrayList<Stop>,止動對象表示包含要在地圖上繪製的路徑所需要的信息的公共汽車站。

不直接使用谷歌Web服務的應用程序,每個停止對象有一個名爲「折線」字段和應用此折線的字符串解碼,檢索一個ArrayList<LatLng>

讓我告訴你,我寫的代碼片斷去做吧。

public void drawRoute(ArrayList<Stop> stops){ 
    googleMap.clear(); 
    removePolylines(); 
     for(int x = 0; x< stops.size(); x++){ 
      Stop stop = stops.get(x); 
      if(x != stops.size() -1){      
       ArrayList<LatLng> routePoints = DataParser.decodePolyline(stop.getPolyline()); 
       Polyline polyline = googleMap.addPolyline(polylineOptions.addAll(routePoints)); 
       polylines.add(polyline);      
      } 
      addMarker(stop); 
     }    
} 

...

private void removePolylines(){ 
    for(Polyline polyline: polylines){ 
      polyline.remove(); 
    } 
} 

我還附上一些截圖更好地說明問題是什麼。

enter image description here

有沒有問題畫一個路線的第一次...

enter image description here

但後來當我按下後退按鈕,選擇另一條路線ID ...

enter image description here

你可以用紅色圓圈看看以前的途徑是STI在地圖上,奇怪的是,標記不再出現,但路線確實如此。

我該如何擺脫這個問題? 是否有更好的解決方案來實現相同?

回答

0

看着另一個相似的答案,它看起來像你只需要在polyline.remove();聲明後添加polylines.remove(polyline);。作爲參考,這裏是另一個類似的問題:Remove the last plotted line from Google Map Android

+0

我在想同樣的事情。 – danny117

+0

@Andrew Kulpa我剛剛找到了一個解決方案,謝謝你的時間。 – Sandoval0992

0

解決好球員的問題,很多掙扎後,我意識到該解決方案是多麼容易。

問題出現在這條線:

Polyline polyline = googleMap.addPolyline(polylineOptions.addAll(routePoints)); 

的事情是polylineOptions對象在類的頂部聲明,並在構造函數中initilalized。所以,每次執行drawRoute(ArrayList<Stop> stops)方法時都會添加一個新的ArrayList<LatLng> routePoints

這就是te路線出現在另一個之上的原因。我還發現,至少在這個具體情況下,不需要調用googleMap.clear()removePolylines()方法。

重構後的代碼如下所示:

public void drawRoute(ArrayList<Stop> stops){ 
    PolylineOptions polylineOptions = new PolylineOptions(); 
    for(int x = 0; x< stops.size(); x++){ 
     Stop stop = stops.get(x); 
     if(x != stops.size() -1){ 
      ArrayList<LatLng> routePoints = DataParser.decodePolyline(stop.getPolyline()); 
      googleMap.addPolyline(polylineOptions.addAll(routePoints));     
     } 
     addMarker(stop); 
    } 
} 

你看有什麼區別? PolylineOptions對象在方法中進行本地聲明和初始化。

我希望這會對其他人有用。