gsiradze
gsiradze

Reputation: 4733

Google maps zoom level

I'm displaying current location in map using that code:

    GoogleMap googleMap;
    public static Location mLocation;

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

        SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);

        googleMap = fm.getMap();

        googleMap.setMyLocationEnabled(true);

        LocationManager locationManager = (LocationManager) this.getSystemService(LOCATION_SERVICE);

        Criteria criteria = new Criteria();

        String provider = locationManager.getBestProvider(criteria, true);

        Location location = locationManager.getLastKnownLocation(provider);

        googleMap.setOnMyLocationChangeListener(new   GoogleMap.OnMyLocationChangeListener() {
            @Override
            public void onMyLocationChange(Location location) {
                mLocation = location;
                displayCurrentLocation();
            }
        });
    }

    public  void displayCurrentLocation() {
        CameraPosition cameraPosition = new CameraPosition.Builder().
                target(new LatLng(mLocation.getLatitude(), mLocation.getLongitude())).
                zoom(15).
                bearing(0).
                build();
        googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
    }
}

If I'll zoom in after few second zoom level returns to it's starter position. I know it's because of zoom(15) in my listener but is there any possibility to don't do that? If use will zoom in and will start walking I don't want to lose my zoom level

Upvotes: 0

Views: 762

Answers (2)

Dalvinder Singh
Dalvinder Singh

Reputation: 1083

Create a String data member in class

String loadLocation="notDone"

in onMyLocationChange

 mMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {
        @Override
        public void onMyLocationChange(Location location) {
            mLocation = location;
            if(loadLocation.equals("notDone")){
                displayCurrentLocation();
            }
        }
    });

in displayCurrentLocation method

  public  void displayCurrentLocation(){
    CameraPosition cameraPosition = new CameraPosition.Builder().
            target(new LatLng(mLocation.getLatitude(), mLocation.getLongitude())).
            tilt(60).
            zoom(15).
            bearing(0).
            build();
       mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
        loadLocation="done";
}

now this method displayCurrentLocation() call only 1 time, when map screen will open. try this.

Upvotes: 2

Deepak John
Deepak John

Reputation: 967

public  void displayCurrentLocation() {
float zoom = map.getCameraPosition().zoom;
        CameraPosition cameraPosition = new CameraPosition.Builder().
                target(new LatLng(mLocation.getLatitude(), mLocation.getLongitude())).
                zoom(zoom ).
                bearing(0).
                build();
        googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
}

Upvotes: 1

Related Questions