2013-04-09 11 views
21

Tôi cần thực hiện như sau: Tôi có Điểm đánh dấu trên bản đồ và tôi cần thay đổi vị trí của điểm đánh dấu. Vì vậy, tôi đã thử các cách sau:Cách thay đổi vị trí của Điểm đánh dấu trên Bản đồ Android v2

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

nơi bản đồ là GoogleMap. Tôi nghĩ rằng tôi phải làm mới bản đồ hoặc somthing bằng nhau?

Trả lời

58

Tìm thấy các giải pháp, cần phải làm điều đó như thế này:

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

nhưng m.setPosition không cập nhật điểm đánh dấu trên bản đồ !! – dvrm

+0

@ dvrm Tôi đã kiểm tra nó và nó thay đổi vị trí của điểm đánh dấu trên bản đồ. Ý bạn là gì khi cập nhật? – arniotaki

+9

Trong đoạn mã này, điểm đánh dấu cũ ở đâu? Bạn đang tạo một cái mới ... – mischka

20

Có một ví dụ về di chuyển điểm đánh dấu trong google bản đồ v2 ứng dụng demo .. Trong file adt-bundle-linux/sdk/extras/google/google_play_services/samples/maps/src/com/exa‌​mple/mapdemo/MarkerDemoActivity.java (4.2.2 ví dụ)

đây mã để di chuyển điểm đánh dấu:

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); 
        } 
       } 
      } 
     }); 
    } 

mã này sẽ tạo hiệu ứng đánh dấu từ một địa chỉ này sang vị trí khác.

+0

'mGoogleMapObject' là gì? –

5

Hầu hết các câu trả lời trên StackOverflow đề xuất sử dụng remove() để xóa điểm đánh dấu và sau đó tạo điểm đánh dấu mới bằng cách sử dụng addMarker. Thay vì làm điều đó, chỉ cần lưu điểm đánh dấu một lần trong biến loại Marker và sau đó cập nhật vị trí của nó.

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

Và sau đó thay vì loại bỏ và tái tạo một dấu hiệu, chỉ cần sử dụng

myMarker.setPosition(newLatLng); 

Hope this helps !!