Когда моя карта показывает, это всегда начинается в фиксированном месте (около Африки).
Затем я использую следующий код, чтобы центрировать карту в нужном мне месте.
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(loc.getLatitude(), loc.getLongitude()), 14.0f));
У меня вопрос: можно ли установить местоположение по умолчанию и уровень масштабирования до отображения карты?
Потому что я не хочу, чтобы мои пользователи видели анимацию в начале.
Спасибо.
moveCamera
лучшее решение для этогоОтветы:
вы можете использовать это для масштабирования напрямую без анимации:
map.moveCamera( CameraUpdateFactory.newLatLngZoom(new LatLng(xxxx,xxxx) , 14.0f) );
источник
MyLocation
чтобы я мог перемещать и увеличивать карту до местоположения пользователя. Поскольку карта инициализируется в XML, я не могу понять, как предотвратить скачок. В идеале я бы спрятал карту, пока она неMyLocation
будет найдена, а затем покажу ее.Взгляните на документацию здесь:
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));
источник
Unexpected namespace prefix "map" found for tag fragment
На всякий случай, если вы хотите загрузить
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.источник
Я создал дескриптор
SupportMapFragment
и настроил егоvisibility
наView.INVISIBLE
использованиеSupportMapFragment.getView().setVisibility()
. Затем вonLocationChanged
обратном вызове, который реализует мой класс, я проверяю, имеет лиINVISIBLE
значениеVISIBLE
true. Это избавляет от скачков, которые вы видите при загрузке, позволяя вам динамически инициализировать начальную позицию. В моем случае я центрирую камеру вокруг местоположения пользователя, поэтомуonLocationChanged
вызывается немедленно из-заsetMyLocationEnabled(true)
.Ваши требования могут быть разными, но в любом случае вам просто нужно установить видимость,
INVISIBLE
а затем найти хорошее место для установкиVISIBLE
после загрузки соответствующих данных.источник
вы можете использовать Directy CameraUpdate, используя статический latlong
LatLong latlong = new LatLong(lat, long); CameraUpdate cameraPosition = CameraUpdateFactory.newLatLngZoom(latLong, 15); mGoogleMap.moveCamera(cameraPosition); mGoogleMap.animateCamera(cameraPosition);
источник