Google Map API V2 - 用户滚动地图时,如何让标记保持在屏幕中心?
我的目的是让用户选择位置。我使用以下代码添加标记(这是来自Android SDK中的com.example.mapdemo
)。
mMap.addMarker(new MarkerOptions()
.position(new LatLng(0, 0))
.title("Marker"));
如何使标记保持在屏幕中央并获取其位置?
Google Map API V2 - 用户滚动地图时,如何让标记保持在屏幕中心?
我的目的是让用户选择位置。我使用以下代码添加标记(这是来自Android SDK中的com.example.mapdemo
)。
mMap.addMarker(new MarkerOptions()
.position(new LatLng(0, 0))
.title("Marker"));
如何使标记保持在屏幕中央并获取其位置?
我不认为你可以在屏幕中央轻松地浮动标记。我的建议是欺骗用户。像按钮一样将标记图像添加到地图上。您可以使用xml布局将其放置在屏幕中央。然后,当用户选择位置时,只需从屏幕中央检索gps坐标。
另外,你也可以让标记可拖动,这样用户就可以在地图上拖动它。
mMap.addMarker(new MarkerOptions().position(coordinate)
.title("Your Title")
.snippet("Please move the marker if needed.")
.draggable(true));
mMap.setOnCameraChangeListener(new OnCameraChangeListener() {
public void onCameraChange(CameraPosition arg0) {
mMap.clear();
mMap.addMarker(new MarkerOptions().position(arg0.target));
}
});
我认为最好的选择是移动标记,当用户移动地图时...
googleMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
@Override
public void onCameraMove() {
marker.setPosition(googleMap.getCameraPosition().target);//to center in map
}
});
//note marker is global
或者简单地说,在您的布局中,使用相对布局将片段放置,并在标记图标上方,您将计算标记始终位于地图的中间...
我认为这很复杂,因为屏幕大小不同,但手机不会每次移动标记...
这是解决方案。
private GoogleMap mMap;
private Marker markerCenter;
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(mMap.getCameraPosition().target);
markerCenter = mMap.addMarker(markerOptions);
mMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
public void onCameraMove() {
markerCenter.setPosition(mMap.getCameraPosition().target);
}
});
}
- gsyskoMarker marker;//have a instance variable marker
mMap.setOnCameraChangeListener(new OnCameraChangeListener();
public void onCameraChange(CameraPosition cameraPosition) {
MarkerOptions options = new MarkerOptions()
.position(cameraPosition.target);
if(marker != null){marker.remove();}
marker = mMap.addMarker(options);
}
这不会很顺畅,因为在中间帧期间不会调用onCameraChange回调函数。只有在相机完全改变后才会调用。
private Marker marker;
public void onMapReady(final GoogleMap googleMap) {
LatLng sydney = new LatLng(-34, 151);
MarkerOptions markerOptions = new MarkerOptions().position(sydney).title("Marker in Sydney");
marker = googleMap.addMarker(markerOptions);
googleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
googleMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
@Override
public void onCameraMove() {
final LatLng target = googleMap.getCameraPosition().target;
marker.setPosition(target);
}
});
}