Utiliser .GetMapAsync à la place .getMap méthode avec Google Play Services (Xamarin)
Un ancien code fonctionne parfaitement de cette manière:
LatLng location = new LatLng (myClass.myLocation.Latitude, myClass.myLocation.Longitude);
CameraPosition.Builder builder = CameraPosition.InvokeBuilder ();
builder.Target (location);
builder.Zoom (18);
CameraPosition cameraPosition = builder.Build ();
MapsInitializer.Initialize (this);
CameraUpdate cameraUpdate = CameraUpdateFactory.NewCameraPosition (cameraPosition);
MapFragment googleMap = FragmentManager.FindFragmentById<MapFragment> (Resource.Id.map);
theMap = googleMap.Map;
if (theMap != null) {
theMap.MapType = GoogleMap.MapTypeNormal;
theMap.MoveCamera (cameraUpdate);
}
mais maintenant que le .Map
est désuet et obsolète, je doit utiliser .GetMapAsync
d'une certaine façon:
theMap = googleMap.GetMapAsync (IOnMapReadyCallback);
Mais je ne comprends pas comment.
Il y a quelqu'un qui peut m'aider?
- Je sais le faire en java: mapFragment.getMapAsync(nouveau OnMapReadyCallback() { @Override public void onMapReady(GoogleMap googleMap) { mGoogleMap = googleMap; moveMapAddBounds(); } }); mais je suis nouveau en C#
- en C#, il n'y a pas de place implémentation de l'interface ... vous devez créer une classe qui implémente l'interface et de passer à cette fonction
public class VeryNaiveImpl : IOnMapReadyCallback { public Action<GoogleMap> Callback; public void onMapReady(GoogleMap googleMap) { if(Callback != null) Callback(googleMap); } }
puis l'utiliser commegoogleMapFrag.GetMapAsync( new VeryNaiveImpl { Callback = (map)=> { /* map is ready*/ }});
- Maintenant, j'ai compris merci, mais j'ai une erreur sur la classe publique: le compilateur dit que je ne l'ai pas mis en œuvre la Android.Gsm.Cartes.IOnMapReadyCallback.OnMapReady!!!!
- rappelez-vous, une question de taille 😛
- Sérieux s'il vous plaît.... 😀 je suis fou... il n'y a pas de documentation sur ce nouveau problème!!!!!!!!!! Avec ce code: public class waitingMap : IOnMapReadyCallback { l'Action publique<GoogleMap> Rappel; public void OnMapReady (GoogleMap googleMap) { if(Rappel != null) Rappel(googleMap); } } j'ai résolu d'un seul des trois problèmes, mais restent deux: 1) je n'implémente pas l'interface membre 'Android.Moment de l'exécution.IJavaObject.Poignée de.get' 2) je n'implémente pas l'interface membre du Système.Jetable.Dispose()
- Laissez-nous continuer cette discussion dans le chat.
- je ne vais pas vous apprendre le C# ... ideone.com/7PoSdp
- Ok est droit. Que dieu vous bénisse. A été d'une aide précieuse! Merci beaucoup...
- Jetez un oeil ici que j'ai récemment mis à jour la mienne: github.com/jamesmontemagno/BikeNow/blob/lollipop/BikeNow/...
- Bonjour James. Je vous remercie beaucoup. J'ai beaucoup apprécié
Vous devez vous connecter pour publier un commentaire.
Votre fragment de carte de classe doit implémenter
OnMapReadyCallback
et remplaceronMapReady()
:Dans votre
onCreateView
utilisationgetMapAsync()
pour définir le rappel sur le fragment:Tout que vous avez besoin pour mettre en œuvre les cartes google maps V2 est ici:
https://developers.google.com/maps/documentation/android/map
Ce pourrait être la fin de répondre à votre question, mais peut utile à quelqu'un d'autre avec le même problème.
GetMapAsync() attend la mise en œuvre de rappel de l'objet de type IOnMapReadyCallback.
Trouver plus de détails ici dans mon entrée de blog: http://appliedcodelog.com/2015/08/androidgmsmapsmapfragmentmap-is.html
Maintenant Appeler les GetMapAsync() et de l'événement d'Action de retour une carte d'instance sur le succès de la génération de la Carte.
Veuillez voir ceci:
Espère que cela va vous aider.
Si vous souhaitez utiliser une vue au lieu d'un fragment de carte ici est la mise en œuvre, j'ai appliqué à obtenir cette transition à partir d'un projet qui a utilisé un précédent jeu-services version. Mis à jour à 9.6.0 pour se conformer à la nouvelle de la FCM et a causé les problèmes dans notre carte des fragments.
Et dans votre fragment:
Important de noter les autorisations suivantes sur votre Manifeste:
J'ai été en mesure de réaliser cette configuration avec des erreurs sur l'API 23 et suivantes libs sur mon Gradle:
Espérons que cette aide!
Votre MapViewActivity classe doit implémenter IOnMapReadyCallback.
Assurez-vous également que vous avez installé les Xamarin.GooglePlayServices.Cartes paquet de NuGet et spécifié les autorisations requises:
- L'accès à l'État du Réseau – Les Cartes de l'API doit être en mesure de vérifier si l'on peut télécharger les carreaux de la carte.
- Accès Internet – accès Internet est nécessaire pour télécharger les carreaux de la carte et de communiquer avec le Google Play Serveurs pour accéder à l'API.
(vérifier l'officiel de la documentation: À l'aide de l'API Google Maps dans votre application)
ce définitivement travail dans NAVIGATION_DRAWER ACTIVITÉ AVEC le FRAGMENT de CARTE
Exécuter votre prorramm par l'ajout de cette dans le Top
L'AJOUTER SUR CRÉER METDOD()
cela fonctionne poussin il