You can use simple newLatLngBounds method in OnCameraChangeListener. All will be working perfectly and you don’t need to calculate screen size. This event occurs after map size calculation (as I understand).
Example:
map.setOnCameraChangeListener(new OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition arg0) {
// Move camera.
map.moveCamera(CameraUpdateFactory.newLatLngBounds(builder.build(), 10));
// Remove listener to prevent position reset on camera move.
map.setOnCameraChangeListener(null);
}
});