我设置了一个标记,将其可拖动状态设置为true。但是当我打电话给marker.getPosition()
时,我总是得到相同的位置,比如拖动结束后标记的位置不会更新。
mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map_place))
.getMap();
LatLng MYLOCATION = new LatLng(Double.valueOf(myLat), Double.valueOf(myLng));
marker = new MarkerOptions()
.position(MYLOCATION)
.title(getString(R.string.map_title_my_location)).draggable(true);
mMap.addMarker(marker).showInfoWindow();
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(MYLOCATION, 18));
close.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
LatLng pos = marker.getPosition();
Toast.makeText(activity, "Lat: " + pos.latitude + "; Long: " + pos.longitude, Toast.LENGTH_LONG).show();
}
});
作为我定义的类变量:
GoogleMap mMap;
MarkerOptions marker;
有什么想法吗?!
答案 0 :(得分:10)
这是一个老问题,但由于我自己也遇到了同样的问题,所以解决方法是:您需要先为地图实例设置OnMarkerDragListener
(mMap.setOnMarkerDragListener(...)
)位置值以获得更新。你真的不需要在监听器实现方法中做任何事情(你可以在任何你喜欢的地方使用marker.getPosition()
),它们只需要存在。
<强>更新强>
现在也在https://developers.google.com/maps/documentation/android-api/marker#marker_drag_events
中记录了这一点您可以使用OnMarkerDragListener监听标记上的拖动事件。要在地图上设置此侦听器,请调用GoogleMap.setOnMarkerDragListener。要拖动标记,用户必须长按标记。当用户将手指从屏幕上移开时,标记将保持在该位置。拖动标记时,最初会调用onMarkerDragStart(Marker)。在拖动标记时,会不断调用onMarkerDrag(Marker)。在拖动onMarkerDragEnd(Marker)的末尾被调用。您可以通过调用Marker.getPosition()随时获取标记的位置。
答案 1 :(得分:6)
您应该在主要活动中实施OnMarkerDragListener()
。在方法onMarkerDragEnd()
内,您可以获得标记的位置(通过使用其ID)