Google Maps Android API で地図画面を現在地に固定したいです。
スクロールの禁止をするまでは問題ないのですが、ピンチ操作でズームをする際や画面を回転する際に中心がずれてしまいます。

やりたいこと

回転操作を以下の画像のようにすると、△が中心になって画面が回転するので、
画面上のどこで回転操作をしても☆(現在地)を中心に画面が回転するようにしたいです。

画像1

ズーム操作の場合も画面上のどこをピンチしても、☆を中心に画面が回転するようにしたい。
現状はピンチ操作をした箇所を中心にズームされてしまいます。
画像2

他のアプリに例えるとIngressのように地図画面を固定したいですが、Google Maps Android APIで可能なのでしょうか。

以下は現在のコードです。
java

package hoge.hoge.hoge.map;

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;

import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.UiSettings;
import com.google.android.gms.maps.model.LatLng;

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, android.location.LocationListener {

  private GoogleMap map;

  private LocationManager locationManager;


  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);

    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
      .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);

  }


  @Override
  public void onMapReady(GoogleMap googleMap) {
    map = googleMap;

    UiSettings uiSettings = map.getUiSettings();
    // scroll操作を禁止
    uiSettings.setScrollGesturesEnabled(false);
    // 回転操作を許可
    uiSettings.setRotateGesturesEnabled(true);
    // zoom操作を許可
    uiSettings.setZoomGesturesEnabled(true);

    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
      // TODO パーミッションが許可されていなかった場合の処理を書こうね
      return;
    }
    map.setMyLocationEnabled(true);

    this.setUpLocationManager();

  }

  @Override
  public void onLocationChanged(Location location) {
    LatLng latLng = new LatLng(location.getLatitude(),location.getLongitude());

    map.animateCamera(CameraUpdateFactory.newLatLng(latLng));
  }

  @Override
  public void onStatusChanged(String provider, int status, Bundle extras) {

  }

  @Override
  public void onProviderEnabled(String provider) {

  }

  @Override
  public void onProviderDisabled(String provider) {

  }

  private void setUpLocationManager() {
    if (locationManager == null) {
      this.locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

      if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        // TODO そのうちパーミッションが許可されていなかった場合の処理を書くよ
        return;
      }
      this.locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 100, 0,  this);
      this.locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 100, 0, this);
    }
  }
}

xml

<fragment android:id="@+id/map"
          android:name="com.google.android.gms.maps.SupportMapFragment"
          xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:map="http://schemas.android.com/apk/res-auto"
          xmlns:tools="http://schemas.android.com/tools"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          tools:context="hoge.hoge.hoge.map.MapsActivity"/>