Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Android Maps - Novidades e Dicas

Avatar for Anderson Anderson
November 03, 2015

Android Maps - Novidades e Dicas

Apresentação feita no Android Meetup #32 do GDG-SP

Avatar for Anderson

Anderson

November 03, 2015

Other Decks in Programming

Transcript

  1. Novidades em mapa Lançado em 3 de dezembro de 2012

    (Play Services 3.1) Configuração muito mais simples Melhorias e novidades na API
  2. Configuração - manual Coletar as informações do certificado do seu

    app (keytool). Registrar o projeto no Google Developers Console e adicionar o Google Maps Android API como um serviço do projeto. Gerar uma chave. Adicionar a chave no seu projeto atraves de um elemento no manifest.
  3. Permissões The ACCESS_COARSE/FINE_LOCATION permissions are not required to use Google

    Maps Android API v2, but you must specify either coarse or fine location permissions for the 'MyLocation' functionality. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> Praticamente a única necessária
  4. Permissões <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <android:uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- Optional permission for App measurement to run. --> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> Adicionadas automaticamente pelo merge de manifesto do Play Services
  5. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="18" android:maxSdkVersion="22" /> “From the next release of

    the Google Play services SDK, the requirement for the WRITE_EXTERNAL_STORAGE permission will be completely dropped from the Google Maps Android API.” Permissões
  6. Mudanças na API GoogleMap googleMap = mapFragment.getMap();//depracated //googleMap pode ser

    null mapFragment.getMapAsync(new OnMapReadyCallback() { @Override public void onMapReady(GoogleMap googleMap) { //sempre provê uma instancia não nula do mapa } });
  7. Novidades - Lite Mode Ideal para mostrar diversos mapas em

    uma única activity ou fragmento Ex: lista de mapas. Mais veloz e usa menos memória. Suporta click listeners, Marker e Polylines
  8. Novidades - Lite Mode Markers sem animação Zoom level são

    integers Move mas não anima a camera setClickable em lista Nada de Tilt, Bearing, Gestures, Tile overlays, Ground overlays, Traffic layer, Indoor maps and buildings
  9. Markers @Override public void onMapReady(GoogleMap map) { Marker marker =

    map.addMarker( new MarkerOptions() .position(new LatLng(10, 10))); marker.remove(); }
  10. InfoWindow new GoogleMap.InfoWindowAdapter() { public View getInfoWindow(Marker marker) { //desenhe

    sua própria infoWindow return null; } public View getInfoContents(Marker marker) { //usa a infowindow padrão //informe apenas o conteúdo return null; } });
  11. Trabalhando com Markers Problema: public final class Maker extend Object

    // não é possível extender Solução: public static HashMap<Marker, MyObject> markers;
  12. Show me the code - drop it like it’s hot

    final Handler handler = new Handler(); final long start = SystemClock.uptimeMillis(); Projection proj = map.getProjection(); Point startPoint = proj.toScreenLocation(target); startPoint.y = 0; final LatLng startLatLng = proj.fromScreenLocation(startPoint); final Interpolator interpolator = new LinearInterpolator(); handler.post(new Runnable() { public void run() { long elapsed = SystemClock.uptimeMillis() - start; float t = interpolator.getInterpolation((float) elapsed / 400); double lng = t * target.longitude + (1 - t) * startLatLng.longitude; double lat = t * target.latitude + (1 - t) * startLatLng.latitude; marker.setPosition(new LatLng(lat, lng)); if (t < 1.0) { handler.postDelayed(this, 10); }}});
  13. Show me the code - Bounce final Handler handler =

    new Handler(); final long start = SystemClock.uptimeMillis(); final LatLng target = marker.getPosition(); Projection proj = map.getProjection(); Point startPoint = proj.toScreenLocation(target); startPoint.offset(0, -100); final LatLng startLatLng = proj.fromScreenLocation(startPoint); final Interpolator interpolator = new BounceInterpolator(); handler.post(new Runnable() { public void run() { long elapsed = SystemClock.uptimeMillis() - start; float t = interpolator.getInterpolation((float) elapsed / 2000); double lng = t * target.longitude + (1 - t) * startLatLng.longitude; double lat = t * target.latitude + (1 - t) * startLatLng.latitude; marker.setPosition(new LatLng(lat, lng)); if (t < 1.0) { handler.postDelayed(this, 16); }}});
  14. Show me the code - Street View public void onStreetViewPanoramaReady(StreetViewPanorama

    panorama) { panorama.setPosition(position); StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder() .zoom(panorama.getPanoramaCamera().zoom) .bearing(180) .tilt(panorama.getPanoramaCamera().tilt) .build(); streetViewPanorama.animateTo(camera, 3000); }
  15. Obrigado! Twitter: @ladoleste Google Plus: +AndersonSilva10 GitHub: ladoleste Gist de

    activity com animação de markers: http://tinyurl. com/gistmeetup32