2012-05-13 1 views
3

Je cherche à comprendre comment je peux répliquer la fonctionnalité de localisation actuelle qui existe dans Maps sur Android (et iPhone) en utilisant la bibliothèque externe de Google Maps. La façon dont la fonction fonctionne dans Maps est que lorsque vous appuyez sur le bouton, elle commence à effectuer un panoramique avec votre position jusqu'à ce que vous touchiez (et/ou bougiez) la carte. En utilisant ce qui suit, j'ai pu obtenir que mon application conserve l'emplacement actuel sur l'écran mais ne conserve pas l'emplacement actuel au centre de l'écran (elle se déplace lorsque l'emplacement s'approche du bord de l'écran alors que Maps le conserve dans centre tout le temps):Réplication des cartes Suivez la fonctionnalité de localisation actuelle dans Android

butMapCurrentLocation.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     runOnUiThread(new Runnable() { 
      public void run() { 
       mapController.animateTo(myLocationOverlay.getMyLocation()); 
      } 
     }); 
    } 
}); 

J'ai aussi essayé setCenter plutôt que animateTo et ils semblent avoir le même effet.

De plus, il est important de noter que je dois être en mesure d'arrêter cette fonction qui maintient l'emplacement au centre (comme lorsqu'un autre bouton est enfoncé ou que la carte est touchée). Le Runnable ci-dessus ne s'arrête pas tout de suite et je ne peux pas l'arrêter correctement lorsqu'on le demande même en utilisant .cancel comme discuté ici: Android: How do I stop Runnable?

+0

À noter également, une fois que j'arrêterai la carte de panning je veux toujours qu'il montre à l'utilisateur leur emplacement s'ils regardent cette partie de la carte. – bbodenmiller

Répondre

1

Il n'y a pas encore de façon officielle de le faire dans Google Maps v2.

Vous pouvez faire ce que vous voulez cependant. Il y a deux choses que vous devez faire:

  1. Enregistrez-vous pour les mises à jour de localisation de certains LocationProviders (par exemple gps) pour obtenir l'emplacement de l'utilisateur. Lorsque vous obtenez l'emplacement animer la carte pour le nouvel emplacement.
  2. Arrêtez ceci lorsque l'utilisateur a déplacé la carte.

Donc, faire 1. est facile, faire 2. n'est pas possible officiellement avec l'API de Maps v2. Regardez ce issue pour plus de détails.

La solution de contournement proposée consiste à créer votre propre MapView (extension de MapView d'origine) et à remplacer sa méthode dispatchTouchEvent. Là, vous pouvez attraper tous les événements tactiles et peut détecter si l'utilisateur a touché/déplacé la carte.

Questions connexes