如何在Android Map v2上更改标记的位置

时间:2013-04-09 14:56:03

标签: android android-maps-v2

我需要做以下事情: 我在地图上有一个标记,我需要改变它的位置。所以我尝试了以下内容:

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

其中map是GoogleMap。我想我必须更新地图或同等的东西?

4 个答案:

答案 0 :(得分:74)

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

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

答案 1 :(得分:21)

在google map 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);
                    }
                }
            }
        });
    }

此代码会将标记从一个地理点设置为另一个地理点。

答案 2 :(得分:12)

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

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

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

即可
myMarker.setPosition(newLatLng);  

希望这会有所帮助!!

答案 3 :(得分:0)

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

grpc::ServerContext