I had the same problem. Since this did not happen when the camera was not animated, this should have been connected with this.
In this case, the camera must be able to complete its work before it updates the background / roads, etc. Since my application updates the position every second, and the map takes about 2 seconds to complete, I get rough roads and the environment in general.
The solution is to use one of the animateCamera overloads:
public final void animateCamera (CameraUpdate update, int durationMs, GoogleMap.CancelableCallback callback)
Moving the map in accordance with the update by animation over the specified duration, and causes an additional callback at the end. See CameraUpdateFactory for a set of updates.
I used a duration of 900 ms for my case, so the animation runs before it gets a new location.
To make the callback work, you need to implement GoogleMap.CancelableCallback for your class. To do this, add two overrides:
@Override public void onFinish() { } @Override public void onCancel() { }
They are not required to solve the problem, although you can add additional logic there.
A camera update call might look like this:
cameraPosition = new CameraPosition.Builder() .target(current) .zoom(zoomLevel) .bearing(bearing) .tilt(tilt) .build(); CameraUpdate update = CameraUpdateFactory.newCameraPosition(cameraPosition); map.animateCamera(update, 900, this);