Como defino o local padrão e o nível de zoom para google map api v2?


88

Quando meu mapa é exibido, ele sempre começa em um local fixo (perto da África).

Em seguida, uso o seguinte código para centralizar o mapa no local que desejo.

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

Minha pergunta é se eu poderia definir um local padrão e um nível de zoom antes que o mapa apareça?

Porque não quero que meus usuários vejam a animação no início.

Obrigado.


Esta questão ajudou .... Mesmo se a localização não estiver habilitada ... animateCamera aponta para algum lugar na África ... estranho! ... moveCameraé a melhor solução para isso
Devrath de

3
hahahhaha ....... + 1 para esta pergunta, você perguntou do meu coração. : D ... "sempre começa em um local fixo (perto da África)" ........ rofll ..... obrigado mesmo assim.
Akash89

2
@ akash89 Começa com LatLng (0.0,0.0) conforme esperado: google.com/maps/@0,0,5z Não tenho certeza do que faz você rolar no chão de tanto rir (se não me engano), mas Estou feliz que você esteja feliz :)
Navid Vafaei

Respostas:


173

você pode usar isso para ampliar diretamente sem a animação:

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

Obrigado, é exatamente o que eu preciso
:)

Eu tenho latitude / longitude mínima e latitude / longitude máxima, então como definir ??
Pratik Butani

você pode adicionar uma nova pergunta para que eu possa postar a resposta completa para você, mas em resumo, você terá que usar LatLngBounds.Builder para criar limites e usá-los.
Moh Sakkijha

1
@Saksak Meu problema é que estou esperando o GPS agarrar MyLocationpara poder mover e ampliar o mapa até a localização do usuário. Como o mapa é inicializado no XML, não consigo descobrir como evitar que o salto aconteça. O ideal é esconder o mapa até que MyLocationseja encontrado e, em seguida, mostrá-lo.
theblang

quando coloquei o mapa, ele me deu um erro e me disse para criar uma variável 'mapa'. é possível importar ou algo assim?
Hanzawa Naoki

85

Dê uma olhada na documentação aqui:

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

A maneira de fazer isso é ligeiramente diferente, dependendo se você está adicionando o mapa via XML ou programaticamente. Se estiver usando XML, você pode fazer da seguinte maneira:

<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"/>

Se estiver fazendo isso de forma programática, você pode fazer o seguinte:

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

1
Boa resposta. Na verdade, este é mais adequado para esta questão.
MightySeal

2
em xml recebo um erro de lintUnexpected namespace prefix "map" found for tag fragment
Muhammad Babar

Se mesmo com xmlns: map = "schemas.android.com/apk/res-auto" você ainda tem o mesmo erro. Tente adicionar este xmlns: tools = " schemas.android.com/tools " e use "tools:" em vez de "map:"
Guillaume Ilitch Tchaïkovsky

Link para a documentação com todas as opções: developers.google.com/maps/documentation/android-sdk/…
Albert Vila Calvo

5

Apenas no caso de você querer carregar Google Mapem qualquer Locationprograma inicial , então você pode usar este pedaço de código

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

Adicione este trecho de código para layout

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

Isso irá carregar GoogleMapem particular Locationdiretamente, ou seja, initialLatLng.


3

Criei um identificador para SupportMapFragmente configurei visibilitypara View.INVISIBLEusar SupportMapFragment.getView().setVisibility(). Então, no onLocationChangedretorno de chamada que minha classe implementa, eu verifico se INVISIBLEe configuro para VISIBLEse verdadeiro. Isso elimina os saltos que você vê durante a carga e permite inicializar dinamicamente a posição inicial. No meu caso, estou centralizando a câmera em torno da localização do usuário, isso onLocationChangedé chamado imediatamente por causa desetMyLocationEnabled(true) .

Seus requisitos podem ser diferentes, mas de qualquer forma, você só precisa definir a visibilidade INVISIBLEe, em seguida, encontrar um bom lugar para definir VISIBLEapós o carregamento dos dados apropriados.


2

você pode usar o Directy CameraUpdate usando latlong estático

 LatLong latlong = new LatLong(lat, long);
 CameraUpdate cameraPosition = CameraUpdateFactory.newLatLngZoom(latLong, 15);
                mGoogleMap.moveCamera(cameraPosition);
                mGoogleMap.animateCamera(cameraPosition);
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.