2011-02-07 17 views
7

Ive cercato di acheive lo stesso, questo è esattamente quello che voglio: - Google Maps ImageMapView mostra overlay quando cliccato

ho implementato googleMapView con sovrapposizioni, ho un problema che voglio mostrare un popup quando si fa clic su ogni overlay, e quando clicco su un altro overlay il popus precedente dovrebbe scomparire e uno nuovo dovrebbe apparire nella posizione cliccata (cioè i punti di proiezione). E il popup non dovrebbe apparire quando clicco da qualsiasi altra parte sullo schermo.Im utilizzando l'evento onTap per registrare onclick. (map_overlay) è il layout che voglio mostrare quando qualcuno fa clic su un punto di proiezione sulla mappa. Il codice è sotto e map_overlay.xml potrebbe essere qualsiasi file.

Classe: ItemizedOverlay

public boolean onTap(GeoPoint p, MapView mapView) { 

LayoutInflater inflater = (LayoutInflater)cContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

LayoutParams lp = new MapView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT, p, LayoutParams.WRAP_CONTENT); 
LinearLayout view = (LinearLayout)inflater.inflate(R.layout.map_overlay, null); 

mapView.removeView(view);  
mapView.invalidate();  
mapView.addView(view,lp); 

mapView.invalidate(); 

return true; 
} 

Di seguito è la classe principale in cui im ​​visualizzazione di punti di proiezione, che sta lavorando bene e im chiamando ho implementato l'evento onTap in un'altra classe, come indicato sopra:

public **class MapView** extends MapActivity{ 
    private ArrayList<MyClass> overlayItem ; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.large_mapview); 
     mapView = (MapView) findViewById(R.id.mapview); 
     // mapView.setBuiltInZoomControls(true); 

     List<Overlay> mapOverlays = mapView.getOverlays(); 
     Drawable drawable = this.getResources().getDrawable(R.drawable.mappointer2); 
     ItemizedOverlay itemizedoverlay = new ItemizedOverlay(drawable,this); 
     OverlayItem overlayitem; 
     GeoPoint point; 
     double lat; 
     double lng;   

     for (int i = 0; i < overlayItem.size(); i++) { 

      lat = Double.parseDouble(overlayItem.get(i).getLatitude()); 
      lng = Double.parseDouble(overlayItem.get(i).getLongitude()); 
      point = new GeoPoint((int) (lat * 1E6),(int) (lng * 1E6)); 

      overlayitem = new OverlayItem(point, i+"".toString(), overlayItem.get(i).getDetails().toString()); 
      itemizedoverlay.addOverlay(overlayitem); 
      mapOverlays.add(itemizedoverlay); 

     } 

     mapView.invalidate(); 
    } 
} 

risposta

12

Check out Android-mapviewballoons su github. Ha un ItemizedOverlay che puoi estendere facendo esattamente questa cosa. Lo uso in molte delle mie app.

+0

Grazie, ci proverò. – user606669

+0

Fantastico! funziona alla grande, facile da usare, buone istruzioni ed esempi! Lo darei +2 se potessi. – plainjimbo

Problemi correlati