Як встановити розташування за замовчуванням і рівень масштабування для google map api v2?


91

Коли моя карта показує, вона завжди починається з фіксованого місця (поблизу Африки).

Потім я використовую такий код для центрування карти до потрібного місця.

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

Моє питання полягає в тому, що я міг би встановити місце розташування за замовчуванням і рівень масштабування перед тим, як карта відображається?

Тому що я не хочу, щоб мої користувачі бачили анімацію на початку.

Дякую.


Це питання допомогло .... Навіть якщо місцезнаходження не ввімкнено ... animateCamera вказує на десь в Африці ... здивоване! ... moveCameraнайкраще рішення для цього
Деврат,

3
ха-ха-ха-ха ....... + 1 за це запитання, ти просив мого серця. : D ... "це завжди починається з фіксованого місця (поблизу Африки)" ........ rofll ..... дякую, хоча.
akash89

2
@ akash89 Починається з LatLng (0.0,0.0), як очікувалося: google.com/maps/@0,0,5z Я не впевнений, що змушує вас кататися по підлозі, сміючись буквально (якщо я не помиляюся), але Я радий, що ти щасливий :)
Navid Vafaei

Відповіді:


175

Ви можете використовувати це для прямого збільшення без анімації:

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

Дякую, це якраз те, що мені потрібно
:)

у мене мінімальна широта / довгота та максимальна широта / довгота, як тоді встановити ???
Пратік Бутані

Ви можете додати нове запитання для цього, щоб я міг опублікувати повну відповідь для вас, але коротше, вам доведеться використовувати LatLngBounds.Builder для створення меж та використання цього.
Moh Sakkijha

1
@Saksak Моя проблема полягає в тому, що я чекаю на GPS, щоб захопити, MyLocationщоб я міг рухатись і збільшувати карту до місця, де знаходиться користувач. Оскільки карта ініціалізована в XML, я не можу зрозуміти, як уникнути стрибка. В ідеалі я ховав би карту, поки MyLocationне знайдеться, а потім показати її.
theblang

коли я розмістив карту, це дало мені помилку і наказало створити змінну "map". можна імпортувати чи щось?
Hanzawa Naoki

86

Погляньте на документацію тут:

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

1
Гарна відповідь. Насправді, це питання більше підходить для цього питання.
MightySeal

2
в xml я отримую помилку ворсуUnexpected namespace prefix "map" found for tag fragment
Мухаммед Бабар

Якщо навіть із xmlns: map = "schemas.android.com/apk/res-auto", ви все одно маєте однакову помилку. Спробуйте додати цей xmlns: tools = " schemas.android.com/tools " та використовуйте "tools:" замість "map:"
Гійом Ілітч Чайковський,

Посилання на документацію з усіма параметрами: developers.google.com/maps/documentation/android-sdk/…
Альберт Віла Кальво

шукав атрибути макета, працюю чудово. спасибі
Абхішек Гарг

5

Про всяк випадок, якщо ви хочете завантажити 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безпосередньо, тобто InitialLatLng.


3

Я створив дескриптор SupportMapFragmentі встановив його visibilityна View.INVISIBLEвикористання SupportMapFragment.getView().setVisibility(). Потім, під час onLocationChangedзворотного виклику, який реалізує мій клас, я перевіряю, чи INVISIBLEвстановлено значення VISIBLEtrue. Це позбавляє від стрибків, які ви бачите під навантаженням, дозволяючи динамічно ініціалізувати початкове положення. У моєму випадку я центрирую камеру навколо місцезнаходження користувача, тому onLocationChangedйого викликають негайно через setMyLocationEnabled(true).

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


2

Ви можете використовувати DirectUpdate CameraUpdate за допомогою статичного latlong

 LatLong latlong = new LatLong(lat, long);
 CameraUpdate cameraPosition = CameraUpdateFactory.newLatLngZoom(latLong, 15);
                mGoogleMap.moveCamera(cameraPosition);
                mGoogleMap.animateCamera(cameraPosition);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.