在应用开始时更改缩放级别Google Maps Api v2

Jai*_*imy 2 android google-maps zoom google-maps-android-api-2

地图准备好后,是否可以更改缩放级别?当我打开应用程序时,它显示我的位置的地图和蓝点.但是,缩放级别是默认值3.如何更改?当我点击'MyLocationButton'时,我知道怎么做,但是当应用程序启动时却没有.

这是我的班级

public class MainPhoneActivity extends FragmentActivity implements ConnectionCallbacks, OnConnectionFailedListener, LocationSource, LocationListener, OnMyLocationButtonClickListener, OnMapReadyCallback{

    private GoogleApiClient mGoogleApiClient;
    private OnLocationChangedListener mMapLocationListener = null;

    // location accuracy settings
    private static final LocationRequest REQUEST = LocationRequest.create()
            .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);


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

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

        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mGoogleApiClient.connect();
    }

    @Override
    public void onPause() {
        super.onPause();
        mGoogleApiClient.disconnect();
    }

    @Override
    public void onMapReady(GoogleMap map) {
        map.setLocationSource(this);
        map.setMyLocationEnabled(true);
        map.setOnMyLocationButtonClickListener(this);
    }

    public void showMyLocation(View view) {
        if (mGoogleApiClient.isConnected()) {
            String msg = "Location = "
                    + LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
            Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onLocationChanged(Location location) {
        if (mMapLocationListener != null) {
            mMapLocationListener.onLocationChanged(location);
        }
    }

    @Override
    public void onConnected(Bundle connectionHint) {
        LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, REQUEST,this);
    }

    @Override
    public void onConnectionSuspended(int cause) {
        // Do nothing
    }

    @Override
    public void onConnectionFailed(ConnectionResult result) {
        // Do nothing
    }

    @Override
    public boolean onMyLocationButtonClick() {
        return false;
    }

    @Override
    public void activate(OnLocationChangedListener onLocationChangedListener) {
        mMapLocationListener = onLocationChangedListener;
    }

    @Override
    public void deactivate() {
        mMapLocationListener = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*ine 7

您可以设置缩放级别,如下所示:

map.animateCamera(CameraUpdateFactory.newLatLngZoom(point,15));
Run Code Online (Sandbox Code Playgroud)

point你的LatLng位置在哪里?通过这种方式,您可以使用给定的缩放级别使该点居中.

完整方法:

@Override
    public void onMapReady(GoogleMap map) {
        map.setLocationSource(this);
        map.setMyLocationEnabled(true);
        map.setOnMyLocationButtonClickListener(this);
        //newLatLngZoom(LatLng , ZoomLevel) -> choose your zoom level
        // and change my 'point' with yours
        map.animateCamera(CameraUpdateFactory.newLatLngZoom(point,15));
    }
Run Code Online (Sandbox Code Playgroud)

编辑:

如果你想获得点坐标,你可以试试这个:

Location loc = map.getMyLocation();
LatLng point = new LatLng(loc.getlatitude() , loc.getLongitude());
Run Code Online (Sandbox Code Playgroud)

并以该点为中心.

完整方法:

@Override
        public void onMapReady(GoogleMap map) {
            map.setLocationSource(this);
            map.setMyLocationEnabled(true);
            map.setOnMyLocationButtonClickListener(this);
            Location loc = map.getMyLocation();
            if(loc != null){
                LatLng point = new LatLng(loc.getLatitude() , loc.getLongitude());
                map.animateCamera(CameraUpdateFactory.newLatLngZoom(point,15));
            }
        }
Run Code Online (Sandbox Code Playgroud)

这可能导致NullPointerExceptionbeacuse loc可能为null.

其他解决方案

如果你想第一次得到坐标,你应该onLocationChanged使用布尔变量设置第一次调用.

宣布它 CRDS_CALL = false;

  @Override
        public void onLocationChanged(Location location) {
            if (mMapLocationListener != null) {
                mMapLocationListener.onLocationChanged(location);
                if(!CRDS_CALL){
                    LatLng point = new LatLng(location.getLatitude(), location.getLognitude());
                    map.animateCamera(CameraUpdateFactory.newLatLngZoom(point,15));
                    CRDS_CALL = true;
                }
        }
    }
Run Code Online (Sandbox Code Playgroud)

在我使用的这个答案中map,你必须使用你的mapFragment,但如果你想在其他方法中使用它onCreate,你必须在它之外声明.

在此之前加上这个 onCreate

SupportMapFragment mapFragment;
Run Code Online (Sandbox Code Playgroud)

在其中,使用它像下面这样:

mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.mapView);
        mapFragment.getMapAsync(this);
Run Code Online (Sandbox Code Playgroud)

这样,您就可以使用mapFragment其他方法