Как установить местоположение по умолчанию и уровень масштабирования для google map api v2?

Когда моя карта показывает, она всегда начинается в фиксированном месте (около Африки).

Затем я использую следующий код, чтобы центрировать карту в нужное место.

mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(loc.getLatitude(), loc.getLongitude()), 14.0f));

Мой вопрос в том, что я могу установить местоположение по умолчанию и уровень масштабирования перед отображением карты?

Потому что я не хочу, чтобы мои пользователи видели анимацию в начале.

Спасибо.

Ответ 1

вы можете использовать это для прямого масштабирования без анимации:

map.moveCamera( CameraUpdateFactory.newLatLngZoom(new LatLng(xxxx,xxxx) , 14.0f) );

Ответ 2

Взгляните на документацию здесь:

https://developers.google.com/maps/documentation/android-api/map#configure_initial_state

Способ сделать это несколько отличается в зависимости от того, добавляете ли вы карту через XML или программно. Если вы используете XML, вы можете сделать это следующим образом:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:map="http://schemas.android.com/apk/res-auto"
  android:id="@+id/map"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  class="com.google.android.gms.maps.SupportMapFragment"
  map:cameraBearing="112.5"
  map:cameraTargetLat="-33.796923"
  map:cameraTargetLng="150.922433"
  map:cameraTilt="30"
  map:cameraZoom="13"/>

Если вы делаете это программно, вы можете сделать следующее:

CameraPosition cameraPosition = new CameraPosition.Builder()
    .target(new LatLng(-33, 150))
    .zoom(13)
    .build();
MapFragment.newInstance(new GoogleMapOptions()
    .camera(camera));

Ответ 3

Я создал дескриптор SupportMapFragment и установил его visibility на View.INVISIBLE, используя SupportMapFragment.getView().setVisibility(). Затем в обратном вызове onLocationChanged, который реализуется моим классом, я проверяю, есть ли INVISIBLE и установлен в VISIBLE, если true. Это избавляет вас от прыжков, которые вы видите при загрузке, позволяя динамически инициализировать начальную позицию. В моем случае я центрирую камеру вокруг местоположения пользователя, поэтому onLocationChanged вызывается сразу из-за setMyLocationEnabled(true).

Ваши требования могут быть разными, но в любом случае вам просто нужно установить видимость на INVISIBLE, а затем найти подходящее место для установки VISIBLE после того, как ваши соответствующие данные были загружены.

Ответ 4

На всякий случай, если вы хотите загрузить Google Map в любом начальном Location программном порядке, вы можете использовать этот фрагмент кода,

FragmentManager fm = getFragmentManager(); // getChildFragmentManager inside fragments.
CameraPosition cp = new CameraPosition.Builder()
                    .target(initialLatLng) // your initial co-ordinates here. like, LatLng initialLatLng
                    .zoom(zoom_level)
                    .build();
SupportMapFragment mapFragment = SupportMapFragment.newInstance(new GoogleMapOptions().camera(cp));
fm.beginTransaction().replace(R.id.rl_map, mapFragment).commit();

Добавьте этот фрагмент кода для layout

<RelativeLayout
       android:id="@+id/rl_map"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent" />

Это будет загружаться GoogleMap при определенном Location прямо в i.e, initialLatLng.

Ответ 5

вы можете использовать directy CameraUpdate с помощью статического latlong

 LatLong latlong = new LatLong(lat, long);
 CameraUpdate cameraPosition = CameraUpdateFactory.newLatLngZoom(latLong, 15);
                mGoogleMap.moveCamera(cameraPosition);
                mGoogleMap.animateCamera(cameraPosition);