Suite

Afficher la légende lorsque l'on clique sur ma position


J'utilise le SDK Esri ArcGIS sur Android et j'essaie de procéder comme suit :

  • Obtenir ma position

  • Lorsque ma position est cliquée, afficher une légende

Jusqu'à présent, j'ai eu la chance de terminer le premier en utilisant unlocationServclasser

J'ai également créé la légende et l'ai testée, c'est bien mais ma question ici est de savoir comment faire en sorte que la carte n'affiche la légende que lorsque je clique sur ma position et pas ailleurs sur la carte ?

Voici mon code :

package com.appzgate.locator ; importer java.util.HashMap; importer java.util.Map; importer android.app.Activity; importer android.graphics.Color; importer android.location.Location; importer android.location.LocationListener; importer android.os.Bundle ; importer android.util.Log ; importer android.view.LayoutInflater; importer android.view.ViewGroup ; importer android.widget.TextView ; importer android.widget.Toast ; importer com.esri.android.map.Callout ; importer com.esri.android.map.GraphicsLayer; importer com.esri.android.map.LocationService ; importer com.esri.android.map.MapView ; importer com.esri.android.map.bing.BingMapsLayer ; importer com.esri.android.map.bing.BingMapsLayer.MapStyle ; importer com.esri.android.map.event.OnSingleTapListener; importer com.esri.android.toolkit.map.MapViewHelper; importer com.esri.core.geometry.GeometryEngine; importer com.esri.core.geometry.Point ; importer com.esri.core.geometry.SpatialReference; importer com.esri.core.map.Graphic ; importer com.esri.core.symbol.SimpleMarkerSymbol ; La classe publique PlacelocatorActivity étend l'activité { MapView mMapView; BingMapsLayer bing; GraphicsLayer locationLayer; EmplacementService loc; Private Callout m_callout; private int m_calloutStyle; Private CalloutContent de ViewGroup ; Graphique graphique; Point mLocation = null, p, mapPoint ; final SpatialReference wm = SpatialReference.create(102100); final SpatialReference egs = SpatialReference.create(4326); MapViewHelper mvHelper; /** Appelé lors de la première création de l'activité. */ @Override public void onCreate(Bundle protectedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mMapView = (MapView) findViewById(R.id.map); mLocation = nouveau Point(); mMapView.enableWrapAround(true); mvHelper = new MapViewHelper(mMapView); m_calloutStyle = R.xml.identify_calloutstyle; LayoutInflater inflater = getLayoutInflater(); m_callout = mMapView.getCallout(); // Obtenez la mise en page de la légende à partir de // layout->identify_callout_content.xml calloutContent = (ViewGroup) inflater.inflate( R.layout.identify_callout_content, null); m_callout.setContent(calloutContent); bing = new BingMapsLayer( "ArUDBy4hjDCywOK-GVofer_1U6GG3GPWxaZ8zp68o01W-nQdiLgcV9MtvGEehxn5", MapStyle.AERIAL); mMapView.addLayer(bing); loc = mMapView.getLocationService(); loc.setLocationListener(new MyLocationListener()); loc.start(); loc.setAutoPan(false); mLocation = loc.getPoint(); locationLayer = new GraphicsLayer(); mMapView.addLayer(locationLayer); mMapView.setOnSingleTapListener(new OnSingleTapListener() { @Override public void onSingleTap(float x, float y) { // TODO Stub de méthode généré automatiquement // mapPoint = mMapView.toMapPoint(x, y); } }); } void identifierLocation(float x, float y) { // Masquer la légende, si la légende du robinet précédent est toujours affichée if (m_callout.isShowing()) { m_callout.hide(); } Point mapPoint = mMapView.toMapPoint(x, y); checkGraphic(); if (graphique != null) { ShowCallout(m_callout, graphique, mLocation); } } private void checkGraphic() { // TODO Stub de méthode généré automatiquement SimpleMarkerSymbol sms = new SimpleMarkerSymbol(Color.GREEN, 25, SimpleMarkerSymbol.STYLE.CROSS); Carte hm = nouvelle HashMap(); hm.put("NOM", "Amman"); hm.put("PAYS", "Jordanie"); graphique = nouveau Graphique (mLocation, sms, hm); locationLayer.addGraphic(graphique); } @Override protected void onDestroy() { super.onDestroy(); } @Override protected void onPause() { super.onPause(); mMapView.pause(); } @Override protected void onResume() { super.onResume(); mMapView.unpause(); } classe privée MyLocationListener implémente LocationListener { public MyLocationListener() { super(); } /** * Si l'emplacement change, mettez à jour notre emplacement actuel. S'il est trouvé pour * la première fois, zoomez sur notre position actuelle avec une résolution de 20 */ public void onLocationChanged(Location loc) { if (loc == null) return; booléen zoomToMe = (mLocation == null) ? vrai faux; mLocation = new Point(loc.getLongitude(), loc.getLatitude()); if (zoomToMe) { p = (Point) GeometryEngine.project(mLocation, egs, wm); // graphique = nouveau Graphique((Géométrie) p, (Symbole) sms, hm); // locationLayer.addGraphic(graphique); mMapView.zoomToResolution(p, 20.0); } } public void onProviderDisabled(String provider) { Toast.makeText(getApplicationContext(), "GPS Disabled", Toast.LENGTH_SHORT).show(); } public void onProviderEnabled(String provider) { Toast.makeText(getApplicationContext(), "GPS Enabled", Toast.LENGTH_SHORT).show(); } public void onStatusChanged(String provider, int status, Bundle extras) { } } private void ShowCallout(Callout calloutView, Graphic graphic, Point mapPoint) { Log.v("call", "in the callout"); // Récupère les valeurs des attributs pour la chaîne graphique cityName = (String) graphic.getAttributeValue("NAME"); String countryName = (String) graphic.getAttributeValue("COUNTRY"); // String cityPopulationValue = ((Double) graphic // .getAttributeValue("POPULATION")).toString(); Log.v("appel", "jusqu'ici tout va bien"); // Définir les propriétés de la légende calloutView.setCoordinates(mapPoint); calloutView.setStyle(m_calloutStyle); calloutView.setMaxWidth(325); // Composez la chaîne pour afficher les résultats StringBuilder cityCountryName = new StringBuilder(); cityCountryName.append(cityName); cityCountryName.append(", "); cityCountryName.append(countryName); TextView calloutTextLine1 = (TextView) findViewById(R.id.citycountry); calloutTextLine1.setText(cityCountryName); // Composez la chaîne pour afficher les résultats StringBuilder cityPopulation = new StringBuilder(); cityPopulation.append("Population : "); // cityPopulation.append(cityPopulationValue); // TextView calloutTextLine2 = (TextView) findViewById(R.id.population); // calloutTextLine2.setText(cityPopulation); calloutView.setContent(calloutContent); calloutView.show(); } }

J'ai compris cela tout seul en ajoutant le code suivant:

int chargé = mvHelper.addMarkerGraphic(loc.getLatitude(), loc.getLongitude(), "Jordan", "Amman", null, icon, false, 0);