2013-04-09 13 views
21

私は以下を行う必要があります: 私は地図上にマーカーがあり、その位置を変更する必要があります。だから私は、次のことを試してみました:Androidマップv2でマーカーの位置を変更するには

マップが GoogleMapある
MarkerOptions a = new MarkerOptions() 
      .position(new LatLng(50,6))); 
     map.addMarker(a); 
     a.position(new LatLng(50,5)); 

。私はマップをリフレッシュしなければならないと思いますか?解決策を見つけた

答えて

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

+0

@dvrmそれをチェックして、地図上のマーカーの位置を変更します。アップデートによってどういう意味ですか? – arniotaki

+9

このスニペットでは、古いマーカーはどこですか?あなたは新しいものを作成しています... – mischka

20

Googleマップ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); 
        } 
       } 
      } 
     }); 
    } 

このコードはマーカーを1つのジオポイントから別のジオポイントにアニメートします。

+0

'mGoogleMapObject'とは何ですか? –

5

StackOverflowの回答のほとんどはremove()を使用してマーカーを削除し、次にaddMarkerを使用して新しいマーカーを作成することを提案しています。その代わりに、タイプ変数Markerにマーカーを一度保存​​し、その位置を更新するだけです。

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

そして代わりに削除し、マーカーを再作成するのではなく、単に

myMarker.setPosition(newLatLng); 

・ホープこのことができますを使用!

関連する問題