Google Map API V2 - 如何在用户滚动地图时将标记保留在屏幕中央?
我的目的是让用户选择一个位置。我使用以下代码添加标记(来自Android SDK中的com.example.mapdemo
)
mMap.addMarker(new MarkerOptions()
.position(new LatLng(0, 0))
.title("Marker"));
如何将标记保留在屏幕中央,然后检索它的位置?
答案 0 :(得分:14)
我认为你不能在屏幕中间保留一个标记并轻松浮动它。我的建议是欺骗你的用户。像标记按钮一样将标记图像添加到地图上。您可以使用xml布局将其放在屏幕中间。然后,当您的用户选择一个位置时,只需从屏幕中间检索gps坐标。
在旁注上你也可以让你的标记拖动然后用户可以将它拖动到地图上。
mMap.addMarker(new MarkerOptions().position(coordinate)
.title("Your Title")
.snippet("Please move the marker if needed.")
.draggable(true));
答案 1 :(得分:8)
怎么样?
mMap.setOnCameraChangeListener(new OnCameraChangeListener() {
public void onCameraChange(CameraPosition arg0) {
mMap.clear();
mMap.addMarker(new MarkerOptions().position(arg0.target));
}
});
答案 2 :(得分:3)
我认为最好的选择是移动标记,当用户移动地图时......
googleMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
@Override
public void onCameraMove() {
marker.setPosition(googleMap.getCameraPosition().target);//to center in map
}
});
//note marker is global
或简单,在您的布局中,相对布局放置片段,并在标记的图标上方,您将计算该标记将始终位于地图的中间...
我认为这很复杂,因为屏幕大小,但手机每次都不会移动标记......
答案 3 :(得分:2)
实际上可以通过在地图上覆盖自定义视图来实现。您将编写一个扩展View的类,您可以覆盖视图的draw()和onTouchEvent()方法,以便在地图中间顶部绘制(看起来像)一个标记。当用户设置标记时,您可以使用projection将标记的屏幕位置转换为地图上的LatLong。然后,您可以在地图上设置正确的标记(现在将固定到地理位置)。
从上面可以看出,这不是最简单的过程。我建议使用doubleA的解决方案,以便于实施。
答案 4 :(得分:0)
Marker 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回调。只有在相机完全更换后才会调用它。
答案 5 :(得分:0)
调用addMarker时获取标记引用。相机移动后,将标记移动到相机返回的目标位置。
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);
}
});
}
答案 6 :(得分:0)
这是解决方案
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);
}
});
}