我需要做以下事情: 我在地图上有一个标记,我需要改变它的位置。所以我尝试了以下内容:
MarkerOptions a = new MarkerOptions()
.position(new LatLng(50,6)));
map.addMarker(a);
a.position(new LatLng(50,5));
其中map是GoogleMap
。我想我必须更新地图或同等的东西?
答案 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/example/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