2013-09-04 2 views
3

Je suis en train de coder une application en utilisant osmdroid pour afficher une carte et je voudrais ajouter un marqueur lorsque l'utilisateur tape sur la carte, en fait j'ai été capable de faire ce mouvement mais ajoute un marqueur même lorsque l'utilisateur effectue un zoom avant ou arrière sur la carte, je ne le veux pas. Ce est le code que je dois ajouter le marqueur:Ajouter un marqueur à la carte sur le robinet

@Override  
    public boolean dispatchTouchEvent(MotionEvent ev) { 
     int actionType = ev.getAction(); 
     switch (actionType) { 
     case MotionEvent.ACTION_DOWN: 
       Projection proj = myOpenMapView.getProjection(); 
       GeoPoint loc = (GeoPoint) proj.fromPixels((int)ev.getX(), (int)ev.getY()); 
       String longitude = Double.toString(((double)loc.getLongitudeE6())/1000000); 
       String latitude = Double.toString(((double)loc.getLatitudeE6())/1000000); 
       List<OverlayItem> anotherOverlayItemArray = new ArrayList<OverlayItem>(); 
       ExtendedOverlayItem mapItem = new ExtendedOverlayItem("", "", new GeoPoint((((double)loc.getLatitudeE6())/1000000), (((double)loc.getLongitudeE6())/1000000)), this); 
       mapItem.setMarker(this.getResources().getDrawable(R.drawable.marker)); 
       anotherOverlayItemArray.add(mapItem); 
       ItemizedIconOverlay<OverlayItem> anotherItemizedIconOverlay 
       = new ItemizedIconOverlay<OverlayItem>(
        this, anotherOverlayItemArray, null); 
       myOpenMapView.getOverlays().add(anotherItemizedIconOverlay); 
       Toast toast = Toast.makeText(getApplicationContext(), "Longitude: "+ longitude +" Latitude: "+ latitude , Toast.LENGTH_LONG); 
       toast.show(); 

     } 
     return super.dispatchTouchEvent(ev); 
    } 

Voilà comment je finalement résolu il:

Overlay touchOverlay = new Overlay(this){ 
        ItemizedIconOverlay<OverlayItem> anotherItemizedIconOverlay = null; 
        @Override 
        protected void draw(Canvas arg0, MapView arg1, boolean arg2) { 

        } 
        @Override 
        public boolean onSingleTapConfirmed(final MotionEvent e, final MapView mapView) { 
         Projection proj = mapView.getProjection(); 
         GeoPoint loc = (GeoPoint) proj.fromPixels((int)e.getX(), (int)e.getY()); 
         longitude = Double.toString(((double)loc.getLongitudeE6())/1000000); 
         latitude = Double.toString(((double)loc.getLatitudeE6())/1000000); 
         ArrayList<OverlayItem> overlayArray = new ArrayList<OverlayItem>(); 
         OverlayItem mapItem = new OverlayItem("", "", new GeoPoint((((double)loc.getLatitudeE6())/1000000), (((double)loc.getLongitudeE6())/1000000))); 
         mapItem.setMarker(marker); 
         overlayArray.add(mapItem); 
         if(anotherItemizedIconOverlay==null){ 
          anotherItemizedIconOverlay = new ItemizedIconOverlay<OverlayItem>(getApplicationContext(), overlayArray,null); 
          myOpenMapView.getOverlays().add(anotherItemizedIconOverlay); 
          myOpenMapView.invalidate(); 
         }else{ 
          myOpenMapView.getOverlays().remove(anotherItemizedIconOverlay); 
          myOpenMapView.invalidate(); 
          anotherItemizedIconOverlay = new ItemizedIconOverlay<OverlayItem>(getApplicationContext(), overlayArray,null); 
          myOpenMapView.getOverlays().add(anotherItemizedIconOverlay); 
         } 
         dlgThread(); 
         return true; 
        } 
       }; 
       myOpenMapView.getOverlays().add(touchOverlay); 

Répondre

2

Vous devez créer une superposition et remplacer la méthode onSingleTapConfirmed() pour obtenir simple robinets:

@Override 
public boolean onSingleTapConfirmed(final MotionEvent event, final MapView mapView) { 
    // Handle single-tap here, then return true. 
    return true; 
} 
+0

Pourriez-vous me dire comment faire cela, je suis vraiment nouveau à cela et ça me rend fou. Toutes mes recherches sur Google ont été infructueuses. – krlos77

+0

@kurtzmarc Je vois une tonne de réponses sur la façon de sélectionner une position sur la carte, mais n'y a-t-il pas de built-ins pour permettre de détecter les clics sur le marqueur d'une DirectedLocationOverlay? –

+0

pouvez-vous s'il vous plaît décrire comment utiliser cette méthode? –

Questions connexes