2013-01-24 7 views
7

Vorrei (nella mia app Android utilizzando Google maps api v2) per nascondere o mostrare gli indicatori sul mio oggetto GoogleMap secondo a una categoria, proprio come in Google Maps API Web, ad esempio:È possibile mostrare/nascondere i marker in Android Google maps api v2?

Ho un GoogleMap con 50 segnalini, 20 di questi rappresentano ristoranti, 20 rappresentano fermate degli autobus e 10 cinema.

E 'possibile su google maps google maps api v2 filtrare su questi marker, nascondendo tutti gli indicatori di ristorante se si deseleziona una casella di controllo, ad esempio?

vorrei fare qualcosa di simile, ma sul mio dispositivo Android utilizzando google maps api v2: http://www.geocodezip.com/v3_MW_example_categories.html

Scusate per la domanda di base, ma io sono un principiante.

+0

sì è possibile nascondere alcuni marcatori – moDev

+0

funziona per voi ?? – moDev

+0

Ciao Mitesh, ci proverò lunedì e ti dirò se funziona, grazie :) – Rami

risposta

20

Provare in questo modo.

Marker restuarantMarkers = gMap.addMarker(new MarkerOptions() 
       .position(latlng) 
       .title("MyPlace").icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_pin)).draggable(true)); 

Al clic evento

restuarantMarkers.setVisible(false); 

In questo modo si può fare utilizzando ciclo ..

farmi sapere se funziona per voi.

+0

Grazie per il suggerimento Mitesh, sono riuscito a fallo in base alla tua risposta.grazie :) – Rami

+0

@droid_dev: è possibile memorizzare il riferimento del marker in arraylist o hashmap e quindi mostrare hide marker per arry o hasmap. I mezzi mostrano tutti i marcatori di contenuto in una hashmap – Wikki

+0

@Wikki Sì, è possibile – moDev

0

Sì, è possibile! Ed ecco come ...

// mmap è un'istanza di GoogleMap che è già stato inizializzato altrove

mMap.setOnCameraChangeListener(getCameraChangeListener()); 
getCameraChangeListener() 
public OnCameraChangeListener getCameraChangeListener() 

{ 
return new OnCameraChangeListener() 
{ 
    @Override 
    public void onCameraChange(CameraPosition position) 

    { 
     addItemsToMap(this.items); 
    } 

}; 

} 

// Il tuo "Item" classe avranno bisogno di almeno un ID univoco, latitudine e longitudine .

private void addItemsToMap(List<Item> items) 
{ 
    if(this.mMap != null) 

{ 

    LatLngBounds bounds = this.mMap.getProjection().getVisibleRegion().latLngBounds; 

    for(Item item : items) 
    { 

     if(bounds.contains(new LatLng(item.getLatitude(), item.getLongitude())) 

     { 
      if(!courseMarkers.containsKey(item.getId())) 

      { 

       this.courseMarkers.put(item.getId(),  this.mMap.addMarker(getMarkerForItem(item))); 

      } 

     } 
     else 
     { 

      if(courseMarkers.containsKey(item.getId())) 

      { 

      courseMarkers.get(item.getId()).remove(); 
      courseMarkers.remove(item.getId()); 

      } 

     } 

    } 

    } 

    } 
+0

Non sono sicuro della casella di controllo ma questo è il codice per aggiungere e rimuovere i marcatori –

+0

Dovresti trovare la latitudine e la longitudine utilizzando la geocodifica. C'è una classe Geocoder in Android. –

+0

Ciao Rachel, il codice è l'aggiunta o l'eliminazione di marcatori in base alla latitudine e longitudine, non ho bisogno di questo. Mi piacerebbe nascondere o mostrare in base a una categoria o descrizione o titolo o qualcosa del genere. – Rami

2

È possibile utilizzare la finestra di dialogo se si desidera filtrare le posizioni.

final Dialog dialog = new Dialog(context); 
     dialog.setContentView(R.layout.dialog); 
     Button bt_ok = (Button) dialog.findViewById(R.id.button1); 
     final CheckBox cb1 = (CheckBox) dialog.findViewById(R.id.checkBox1); 
     final CheckBox cb2 = (CheckBox) dialog.findViewById(R.id.checkBox2); 
     dialog.setTitle("Category"); 

     bt_ok.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       mMap.clear(); 
       if (cb1.isChecked()){ 
        mMap.addMarker(new MarkerOptions().position(new LatLng(44.109798, 15.242270)).title("Pin").icon(BitmapDescriptorFactory.fromResource(R.drawable.museum))); 
       } 
       if (cb2.isChecked()){ 
        mMap.addMarker(new MarkerOptions().position(new LatLng(44.209798, 15.392270)).title("Pin 2").icon(BitmapDescriptorFactory.fromResource(R.drawable.restaurants))); 
       } 
       dialog.dismiss(); 
      } 

     }); 

     dialog.show();