2012-12-18 233 views
3

我在想什麼最佳實踐是使用Google Maps API v2在地圖上繪製動態路線。我想要一張能夠在用戶移動時延長路線的地圖。通過使用Polyline和PolylineOptions似乎有明顯的解決方案。但我只是找不到一個簡單的方法來添加點之後我實例化了折線。畫一條折線就是這樣的:如何使用Google Maps Android API繪製動態線(路線)v2

PolylineOptions polylineOptions = new PolylineOptions(); 
polylineOptions.add(POINT1, POINT2, POINT3); 
Polyline line = googleMap.addPolyline(polylineOptions); 

但是在我把這條線傳遞給GoogleMap之後,我無法給它添加任何新的點。像

polylineOptions.add(POINT1, POINT2, POINT3); 

事情並沒有我的路線添加任何東西。

我可以添加完整的新折線。但是沒有延長現有產品的方法嗎?我通過獲取折線的所有點想出了一個辦法,添加新的點,並將它們寫回線:

List<LatLng> points = line.getPoints(); 
points.add(POINT4); 
line.setPoints(points); 

但它似乎是麻煩我。有任何想法嗎?

+0

列表 points = line.getPoints(); points.add(POINT4); line.setPoints(points); 工作正常,因爲你保持「線」完好無損。並只更新它。 –

回答

0

查看文檔,看起來polylineOptions.add(LatLng)googleMap.addPolyline(polylineOptions)方法返回polylineOptions對象。第一種方法也將返回polylineOptionsWITH加到最後的點。

我想你必須再次添加polylineOptionsgoogleMap.addPolyline(polylineOptions)或在第二次添加之前使用googleMap.clear()。服用點是這樣的:

polylineOptions = googleMap.addPolyline(polylineOptions); 
// googleMap.clear(); 
googleMap.addPolyline(polylineOptions.add(point)); 
+2

同意這種方式似乎是可能的。但是在將PolylineOptions傳遞給GoogleMap之後,是不是有一種更簡單的方法可以將一個點添加到Polyline **中?使用clear(),然後將舊的PolylineOption與新的點一起添加在性能方面似乎是一個糟糕的主意。 – Kris

2

mainActivity類,定義一個名爲prev一個私有的靜態變量LatLng和第一初始化爲(0,0)。還要創建一個標誌變量並將0賦值給它。在聽衆的OnLocationChanged方法中,創建一個名爲current的本地變量LatLng,並在此處獲取當前座標...首先檢查標誌的值,如果爲0,則將current指定爲prev。然後添加一條折線。

分配currentprev試(會出現這種情況,每次爲第一時間後,該標誌將是1)

例如:

public void onLocationChanged(Location location) 
{ 

    LatLng current = new LatLng(location.getLatitude(), location.getLongitude()); 

    if(flag==0) //when the first update comes, we have no previous points,hence this 
    { 
     prev=current; 
     flag=1; 
    } 
    CameraUpdate update = CameraUpdateFactory.newLatLngZoom(current, 16); 
    map.animateCamera(update); 
    map.addPolyline((new PolylineOptions()) 
     .add(prev, current).width(6).color(Color.BLUE) 
     .visible(true)); 
    prev=current; 
    current = null;      
} 

這樣的事情。當然可以進行性能改進,這只是一個示例代碼。但它應該工作。每次多段線將只添加前一個和當前點,從而逐點擴展。

相關問題