2011-09-28 11 views
11

Ho scritto un'applicazione di mappatura che ha due attività, una mostra una visualizzazione di Google Maps, l'altra visualizza la vista equivalente utilizzando osmdroid 3.0.5 jar.Pizzico per zoomare con Osmdroid

Fino ad ora sono stato testato solo su emulatori e la funzionalità è completamente identica in termini di area mostrata e dati di sovrapposizione. Ora ho eseguito l'app su un vero dispositivo Gingerbread, ho notato che l'attività di Google Maps sembra supportare il pizzico per lo zoom, mentre quella Osmdroid non lo fa.

Non ho scritto alcun codice specifico per pizzicare per lo zoom per il lato Google o per Osmdroid. Entrambe le attività implementano OnTouchListener. Entrambe le attività hanno solo uno stub per OnTouch come:

@Override 
public boolean onTouch(View v, MotionEvent e) { 
    // chain it for now 
    return false; 
} 

mio mapview nell'attività osmdroid è della classe: org.osmdroid.views.MapView

Qualcuno sa come fare pinch to zoom lavorare con osmdroid o conoscere un'applicazione di esempio con osmdroid che potrei studiare e adattare alla mia app?

risposta

3

Osmdroid ha la funzionalità per lo zoom. Dovrai configurare un gesturelistener per verificare l'azione di pizzicamento, a quel punto dovresti chiamare la funzione di zoom in osmdroid. Credo in osmdroid 3.0.5 è qualcosa come

mOsm.getController.setZoomLevel(someNumber) (mOsm è un'istanza della visualizzazione mappa).

Ho la funzione di zoom che funziona per il pizzico opposto (le dita iniziano a chiudersi e poi si espandono). Io suggerisco di usare un MotionEvent (come si sta facendo) e di fare qualcosa di simile:

boolean finished = false; 

@Override 
public boolean onTouch(View v, MotionEvent e) { 

    switch (e.getAction()) { 

     case MotionEvent.ACTION_DOWN: 
      finished = false; 
      break; 

     case MotionEvent.ACTION_MOVE: 
      finished = false; 
      break; 

     case MotionEvent.ACTION_UP: 
      //action is finishing at this point, so now I can do my refreshActionOnMap(); 
      if (!finished) 
       refreshActionOnMap(); 
      break; 
    } 
    return true; 
} 

Il codice ho aggiunto offerte con il pizzico - il booleano finito è qualcosa che ho implementato nel mio programma per capire quando aggiorna la mappa. Questo dovrebbe aiutarti di più.

Here è un'ulteriore spiegazione di ciò.

Se stai cercando qualcosa di diverso, prova a leggere here. Android ha supportato l'azione di pizzico da giugno 2010 a quanto pare.

+0

Grazie per l'informazione. Penso che i collegamenti si dimostreranno utili. Immagino che l'attività di Google Maps (MapsActivity) debba implementare il pizzico dietro le quinte. Ovviamente il loro codice è closed source, quindi sembra che dovrò fare un po 'di lavoro invece di copiare la loro implementazione. +1 per i collegamenti. – NickT

+0

L'ho sperimentato nel mio programma, e il codice sopra funziona per me. Se è più utile allora ++! – digerati32

+2

Avrebbe funzionato subito se non fossi un IDIOT! Ho perso la linea mMapVw.setMultiTouchControls (true); Di sicuro non risponderò alla mia stessa domanda. Quindi per impedire agli altri di sprecare il loro tempo e in segno di gratitudine per avermi fatto pensare, accetterò la tua risposta. – NickT

31
MapView.setBuiltInZoomControls(true); 
MapView.setMultiTouchControls(true); 
+5

Funziona, anche se è implementato male. – Warpzit

+5

Ho scoperto che sembra che stia ingrandendo bene quando sto muovendo le mie due dita, ma non appena li alzo la mappa salta in una posizione diversa. @ Warpzit È questo che intendevi per "implementato male"? –

+0

@DavidDoria sì, non funziona come previsto :) – Warpzit

2

E 'possibile non eseguire lo zoom al centro della mappa ma al centro degli utenti con due dita.

+0

hai trovato una buona soluzione? in caso affermativo, per favore rispondi alla mia domanda http://stackoverflow.com/questions/15626091/osmdroid-and-pinch –

+0

sfortunatamente no ma ho posto la domanda anche qui forse un giorno sarà risolto :) http: // stackoverflow. com/domande/15159544/due dita-o-pinc-zoom-to-mapview-in-osmdroid – ismail