我需要执行以下操作:我在地图上有一个标记,我需要更改它的位置。所以我尝试了以下方法:
MarkerOptions a = new MarkerOptions()
.position(new LatLng(50,6)));
map.addMarker(a);
a.position(new LatLng(50,5));
其中地图是一个GoogleMap
。我想我必须刷新地图或类似的东西?
我需要执行以下操作:我在地图上有一个标记,我需要更改它的位置。所以我尝试了以下方法:
MarkerOptions a = new MarkerOptions()
.position(new LatLng(50,6)));
map.addMarker(a);
a.position(new LatLng(50,5));
其中地图是一个GoogleMap
。我想我必须刷新地图或类似的东西?
找到解决方案,需要这样做:
MarkerOptions a = new MarkerOptions()
.position(new LatLng(50,6)));
Marker m = map.addMarker(a);
m.setPosition(new LatLng(50,5));
谷歌地图 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);
}
}
}
});
}
此代码将动画标记从一个地理点到另一个。
StackOverflow 上的大多数答案都建议使用remove()
删除标记,然后使用addMarker
. 而不是这样做,只需将标记保存在Marker
类型变量中一次,然后更新其位置。
MarkerOptions a = new MarkerOptions().position(new LatLng(50,6)));
myMarker = mGoogleMap.addMarker(a);
然后无需删除并重新创建标记,只需使用
myMarker.setPosition(newLatLng);
希望这可以帮助 !!
在函数之外定义“标记”。第一次,它将为 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));
}