Autore Topic: Marker multipli e cliccabili.  (Letto 1439 volte)

Offline Mr.Donut

  • Utente junior
  • **
  • Post: 67
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Nexus One, Lg Optimus Chat
  • Sistema operativo:
    Ubuntu 11.04
Marker multipli e cliccabili.
« il: 23 Marzo 2012, 18:02:18 CET »
0
Salve forum, come da titolo mi piacerebbe inserire nella mia mappa dei marker e permettere all'utente di cliccarvi sopra.
Per quanto riguarda l'aggiunta di altri marker credo di essere vicino alla soluzione inserendo altri "overlay item" con coordinate diverse.
Ma per quanto riguarda il cliccarvi sopra non mi viene nessuna idea.

Per spiegarvi quello che vorrei fare incollo un'immagine. Vorrei che dopo un click su un marker compaia una nuvoletta, esattamente come in google maps, con delle informazioni dentro.

Come posso fare?

Grazie

Offline daveblack

  • Nuovo arrivato
  • *
  • Post: 43
  • Respect: 0
    • http://www.linkedin.com/profile/view?id=155824415&trk=tab_pro
    • Mostra profilo
    • DC Hall
  • Dispositivo Android:
    Samsung Galaxy Next
  • Sistema operativo:
    Mac OSX 10.7 Lion
Re:Marker multipli e cliccabili.
« Risposta #1 il: 23 Marzo 2012, 21:13:35 CET »
0
Ciao, credo tu debba implementare
Codice (Java): [Seleziona]
public boolean onTouchEvent(android.view.MotionEvent e, MapView mapView) della classe "Overlay".

Ti rimando alla reference ufficiale Google:
Generated Documentation (Untitled)

Offline Mr.Donut

  • Utente junior
  • **
  • Post: 67
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Nexus One, Lg Optimus Chat
  • Sistema operativo:
    Ubuntu 11.04
Re:Marker multipli e cliccabili.
« Risposta #2 il: 23 Marzo 2012, 21:18:52 CET »
0
Ciao, credo tu debba implementare
Codice (Java): [Seleziona]
public boolean onTouchEvent(android.view.MotionEvent e, MapView mapView) della classe "Overlay".

Ti rimando alla reference ufficiale Google:
Generated Documentation (Untitled)


Guarda sono tre giorni che ci provo (specialmente con l'onTouchEvent) e assolutamente niente... Sicuramente sbaglio qualche cosa di triviale... Però che nervi :( Meno male che è venerdì!

Offline daveblack

  • Nuovo arrivato
  • *
  • Post: 43
  • Respect: 0
    • http://www.linkedin.com/profile/view?id=155824415&trk=tab_pro
    • Mostra profilo
    • DC Hall
  • Dispositivo Android:
    Samsung Galaxy Next
  • Sistema operativo:
    Mac OSX 10.7 Lion
Re:Marker multipli e cliccabili.
« Risposta #3 il: 23 Marzo 2012, 21:30:18 CET »
0
Crecando in giro dovresti usare ItemizedOverlay e non Overlay... poi esiste un metodo che si chiama onTap().

Dovrebbe essere quello che stai cercando.

Offline alexAndroid

  • Utente normale
  • ***
  • Post: 185
  • Respect: +27
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Giò
  • Sistema operativo:
    Ubuntu 11.10; Windows XP
Re:Marker multipli e cliccabili.
« Risposta #4 il: 24 Marzo 2012, 09:57:50 CET »
+2
Esatto, dovresti implementare una classe ItemizeOverlay. Ti mostro una classe che ho implementato in passato che consente di mostrare dei Marker cliccabili.
Codice (Java): [Seleziona]
/*La classe ItemizeOverlay gestisce l'insieme degli Overlay (oggetti individuali che
 *vengono posizionati sulla mappa)
 */

public class AItemizedOverlay extends ItemizedOverlay<OverlayItem> {
       
        //Gli OverlayItem sono oggetti posizionabili sulla mappa
        private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
        private Context mContext = null;
       
        //Costruttore che garantisce l'onTap(int)
        public AItemizedOverlay(Drawable marker, Context context) {
                super(boundCenterBottom(marker));
                mContext = context;
        }

        @Override
        protected OverlayItem createItem(int i) {
                return mOverlays.get(i);
        }

        @Override
        public int size() {
                return mOverlays.size();
        }
       
        public void remove(int i) {
                this.mOverlays.remove(i);
                populate();
        }
       
        @Override
        protected boolean onTap(int index) {
          OverlayItem item = mOverlays.get(index);
          final String nome = item.getTitle();
          // Costruisco un alert dialog
          AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
          dialog.setTitle(item.getTitle());
          dialog.setMessage(item.getSnippet());
          dialog.setIcon(item.getMarker(R.drawable.lente));
          dialog.setNegativeButton(R.string.close, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                                dialog.dismiss();
                        }
                });
          dialog.setPositiveButton(R.string.more_info, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                     dialog.dismiss();
                }
        });
         
          dialog.show();
          return true;
        }
       
        public void addOverlay(OverlayItem overlay) {
            this.mOverlays.add(overlay);
            populate();
        }
       
        public void clear() {
                mOverlays.clear();
                populate();
        }

}
Sei stato aiutato oppure il tuo problema è stato risolto? Allora premi il tasto THANKS E' un modo utile e carino per ringraziare chi ti è stato di aiuto.

Offline Mr.Donut

  • Utente junior
  • **
  • Post: 67
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Nexus One, Lg Optimus Chat
  • Sistema operativo:
    Ubuntu 11.04
Re:Marker multipli e cliccabili.
« Risposta #5 il: 26 Marzo 2012, 21:17:26 CEST »
0
Alex mi hai dato un consiglio e un esempio molto utili! THANKS =)

Vi è però un problema nuovo :'(
Mi sono creato una classe molto molto simile alla tua e adesso posso aggiungere tutti i punti che voglio alla mappa. Quando tappo sopra faccio comparire un toast al posto della nuvoletta stile fumetto come vorrei, ma questo non è il problema principale.
Aggiungendo i miei OverlayItem alla mia classe personalizzata ItemizedOverlay (eccetera...), non mi compare più il marker che segnala la mia posizione sulla mappa! E credo che il motivo principale sia che quando faccio la overlays.add(imetmizedOverlayObject), ne faccio prima una per i marker tappabili e una per il marker che segnala la mia posizione... Qualche idea a riguardo?

Posto il pezzetto di codice necessario per capire quello che ho fatto.

Codice (Java): [Seleziona]
...
myLocationOverlay = new MyLocationOverlay(_this, mapView);
List<Overlay> overlays = mapView.getOverlays();
                                       
Drawable drawable = _this.getResources().getDrawable(R.drawable.markerforevent);
                                       
MyItemizedOverlay itemizedoverlay = new MyItemizedOverlay(drawable, _this);
                                       
GeoPoint point = new GeoPoint(coord1, coord2);

mapView.getController().setCenter(point);
OverlayItem overlayitem = new OverlayItem(point, "GeoPoint1", "Random Btn1");
                         
GeoPoint point2 = new GeoPoint(coord3,coord4);
OverlayItem overlayitem2 = new OverlayItem(point2, "GeoPoint2", "Random Btn2");
                         
itemizedoverlay.addOverlay(overlayitem);
itemizedoverlay.addOverlay(overlayitem2);
overlays.add(itemizedoverlay);
                                       
overlays.add(myLocationOverlay);
myLocationOverlay.enableMyLocation();

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
                                                                       
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 10000, 100,
                                                        locationListener);

EDIT1

Emh.. Ok.. Non so perché ma riavviandola un paio di volte è comparso anche il marker che segnala il mio punto..
Scusate per il topic inutile.. Dannata connessione wireless >__<
« Ultima modifica: 26 Marzo 2012, 21:24:49 CEST da Mr.Donut »

Offline LucaP84

  • Utente junior
  • **
  • Post: 50
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Seven
Re:Marker multipli e cliccabili.
« Risposta #6 il: 23 Luglio 2012, 15:31:48 CEST »
0
Ciao, siccome dovrei realizzare una cosa simile alla tua, hai risolto il problema?
A limite potresti postare il codice così da poterne prendere visione.
Grazie
Luca

Offline emaborsa

  • Utente normale
  • ***
  • Post: 274
  • Java Developer
  • Respect: +33
    • Google+
    • emaborsa
    • Mostra profilo
    • www.emaborsa.com
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Linux 10 - Win8.1 - Android 4.1.2
Re:Marker multipli e cliccabili.
« Risposta #7 il: 29 Luglio 2012, 00:08:38 CEST »
0
Salve forum, come da titolo mi piacerebbe inserire nella mia mappa dei marker e permettere all'utente di cliccarvi sopra.
Per quanto riguarda l'aggiunta di altri marker credo di essere vicino alla soluzione inserendo altri "overlay item" con coordinate diverse.
Ma per quanto riguarda il cliccarvi sopra non mi viene nessuna idea.

Per spiegarvi quello che vorrei fare incollo un'immagine. Vorrei che dopo un click su un marker compaia una nuvoletta, esattamente come in google maps, con delle informazioni dentro.

Come posso fare?

Grazie

Devi estendere ItemizedOverlay<OverlayItem> ed implementare il tuo Overlay... poi facendo l'override del metodo protected boolean onTap(int index) puoi dirgli cosa fare:

Codice (Java): [Seleziona]
@Override
        protected boolean onTap(int index) {
                mapView.removeAllViews();
                MapView.LayoutParams mapParams = new MapView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT,
                                mOverlays.get(index).getPoint(), MapView.LayoutParams.BOTTOM_CENTER);
                Park park = mOverlays.get(index).getPark();
                TextView popUpName = (TextView) popUp.findViewById(R.id.popUpName);
                popUpName.setText(park.getName());
                TextView popUpState = (TextView) popUp.findViewById(R.id.popUpState);
                popUpState.setText(park.getCity() + ", " + park.getState());
                int resId = context.getResources().getIdentifier(park.getFlag(), "drawable", CableParkApplication.PACKAGE);
                ImageView flagView = (ImageView) popUp.findViewById(R.id.popUpFlag);
                flagView.setImageDrawable(context.getResources().getDrawable(resId));
                mapView.addView(popUp, mapParams);
                return super.onTap(index);
        }

Ovviamente quando istanzi l'overlay, devi aggiungere (add) tutti i marker che vuoi sulla mappa.