32

我需要执行以下操作:我在地图上有一个标记,我需要更改它的位置。所以我尝试了以下方法:

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

其中地图是一个GoogleMap。我想我必须刷新地图或类似的东西?

4

4 回答 4

87

找到解决方案,需要这样做:

MarkerOptions a = new MarkerOptions()
    .position(new LatLng(50,6)));
Marker m = map.addMarker(a);
m.setPosition(new LatLng(50,5));
于 2013-04-09T15:13:45.167 回答
23

谷歌地图 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);
                }
            }
        }
    });
}

此代码将动画标记从一个地理点到另一个。

于 2013-04-09T15:22:16.840 回答
17

StackOverflow 上的大多数答案都建议使用remove()删除标记,然后使用addMarker. 而不是这样做,只需将标记保存在Marker类型变量中一次,然后更新其位置。

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

然后无需删除并重新创建标记,只需使用

myMarker.setPosition(newLatLng);  

希望这可以帮助 !!

于 2016-12-08T10:50:24.063 回答
5

在函数之外定义“标记”。第一次,它将为 null 并执行“if”条件。第二次将执行“else”。

        Marker marker = null;    
        protected void onPostExecute(Coordinates coordinates) {
        LatLng latLong = new LatLng("lat", "long");
        if (marker == null) {
            MarkerOptions options = new MarkerOptions().position(latLong)
                    .title("Marker Title");
            marker = mMap.addMarker(options);
        }
        else {
            marker.setPosition(latLong);
        }
     mMap.moveCamera(CameraUpdateFactory.newLatLng(latLong));
     mMap.animateCamera(CameraUpdateFactory.zoomTo(16f));
    }
于 2018-07-05T17:08:32.867 回答