2016-02-02 3 views
0

Я отображать текущее местоположение на карте с помощью этого кода:Google карты масштаба уровня

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)); 
    } 
} 

Если я буду приближать после нескольких возвращений второго уровня масштабирования, чтобы это положение стартера. Я знаю, что это из-за увеличения (15) в моем слушателе, но есть ли возможность этого не делать? Если использование будет увеличивать и начнет ходить, я не хочу потерять свой уровень масштабирования

ответ

2

Создать элемент данных строк в классе

String loadLocation="notDone" 

в onMyLocationChange

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

в displayCurrentLocation метод

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"; 
} 

сейчас этот метод displayCurrentLocation() вызов только 1 раз, когда откроется экран карты. попробуйте это.

+0

переменная loadLocation доступна изнутри внутреннего класса. он должен быть окончательным. – gsiradze

+0

не окончательный, если вы окончательный, вы не можете изменить его значение, его значение может измениться только в конструкторе. –

+0

спасибо, что это работает – gsiradze

1
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)); 
} 
Смежные вопросы