2013-04-09 81 views
21

我需要執行以下操作: 我在地圖上有一個標記,我需要更改它的位置。所以我嘗試了以下幾點:如何更改Android地圖上標記的位置v2

MarkerOptions a = new MarkerOptions() 
      .position(new LatLng(50,6))); 
     map.addMarker(a); 
     a.position(new LatLng(50,5)); 

其中map是一個GoogleMap。我想我必須刷新地圖或平等嗎?

回答

58

找到了解決辦法,需要做的是這樣的:

MarkerOptions a = new MarkerOptions() 
    .position(new LatLng(50,6))); 
Marker m = map.addMarker(a); 
m.setPosition(new LatLng(50,5)); 
+6

但m.setPosition不更新地圖上的標記! – dvrm 2013-06-12 10:30:53

+0

@dvrm我檢查了它,它改變了地圖上標記的位置。更新是什麼意思? – arniotaki 2014-07-18 09:08:49

+9

在這段代碼中,舊標記在哪裏?你正在創建一個新的... – mischka 2014-10-30 17:26:38

20

有一個在谷歌地圖V2演示應用程序移動標記。在文件adt-bundle-linux/sdk/extras/google/google_play_services/samples/maps/src/com/exa‌​mple/mapdemo/MarkerDemoActivity.java(4.2.2例子)

這裏的一個例子移動標記的代碼:

public void animateMarker(final Marker marker, final LatLng toPosition, 
      final boolean hideMarker) { 
     final Handler handler = new Handler(); 
     final long start = SystemClock.uptimeMillis(); 
     Projection proj = mGoogleMapObject.getProjection(); 
     Point startPoint = proj.toScreenLocation(marker.getPosition()); 
     final LatLng startLatLng = proj.fromScreenLocation(startPoint); 
     final long duration = 500; 

     final Interpolator interpolator = new LinearInterpolator(); 

     handler.post(new Runnable() { 
      @Override 
      public void run() { 
       long elapsed = SystemClock.uptimeMillis() - start; 
       float t = interpolator.getInterpolation((float) elapsed 
         /duration); 
       double lng = t * toPosition.longitude + (1 - t) 
         * startLatLng.longitude; 
       double lat = t * toPosition.latitude + (1 - t) 
         * startLatLng.latitude; 
       marker.setPosition(new LatLng(lat, lng)); 

       if (t < 1.0) { 
        // Post again 16ms later. 
        handler.postDelayed(this, 16); 
       } else { 
        if (hideMarker) { 
         marker.setVisible(false); 
        } else { 
         marker.setVisible(true); 
        } 
       } 
      } 
     }); 
    } 

此代碼會將標記從一個地址點動畫到另一個點。

+0

什麼是'mGoogleMapObject'? – 2017-01-24 18:37:30

5

StackOverflow上的大部分答案建議使用remove()刪除標記,然後使用addMarker創建一個新標記。不要這樣做,只需將標記保存在Marker類型變量中,然後更新其位置。

MarkerOptions a = new MarkerOptions().position(new LatLng(50,6))); 
myMarker = mGoogleMap.addMarker(a); 

然後,而不是刪除並重新創建一個標記,只需使用

myMarker.setPosition(newLatLng); 

希望這有助於!