Google Map API V2 - How do I keep a marker in the center of the screen while user is scrolling the map ?
My purpose is to let user choose a location. I use the follo
How about?
mMap.setOnCameraChangeListener(new OnCameraChangeListener() {
public void onCameraChange(CameraPosition arg0) {
mMap.clear();
mMap.addMarker(new MarkerOptions().position(arg0.target));
}
});
This would actually be possible by overlaying a custom view on top of your map. You would write a class that extends View and you could override the draw() and onTouchEvent() methods of your view, such that it would draw (what looks like) a marker, over top of the middle of the map. When the user sets the marker, you would use a projection to translate the screen location of the marker into a LatLong on the map. You could then set a proper marker on the map (which would now be fixed to the geolocation).
As you can tell from the above, this is not the simplest process. I would suggest going with doubleA's solution, for ease of implementation.
This is the solution
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);
}
});
}
I do not think that you can actually keep a marker in the middle of the screen and float it easily. My suggestion is to trick your user. Add your marker image onto the map like a button. you can place it in the middle of the screen using the xml layout. Then when your user selects a location just retrieve the gps coordinates from the middle of the screen.
On a side note you could also just make your marker draggable Then the user could drag it around the map.
mMap.addMarker(new MarkerOptions().position(coordinate)
.title("Your Title")
.snippet("Please move the marker if needed.")
.draggable(true));
I think the best option is move marker, when user move map...
googleMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
@Override
public void onCameraMove() {
marker.setPosition(googleMap.getCameraPosition().target);//to center in map
}
});
//note marker is global
or simple, in your layout, with relative layout put the fragment, and in above the icon of marker, you will calculate that marker will always in the middle of the map...
i think this is complicate, by size of screens, but the phone will not move every time the marker...
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);
}
This won't be smooth because,onCameraChange call back is not called during intermediate frames.It is called only after the camera is changed completely.