2011-09-28 16 views
11

He escrito una aplicación que tiene dos actividades, una actividad muestra una vista de Google Maps, y la otra muestra la vista equivalente usando osmdroid 3.0.5 jar.Pellizcar para acercar con Osmdroid

Hasta ahora he estado probando solo emuladores y la funcionalidad es completamente idéntica en términos de área mostrada y datos de superposición. Ahora que he ejecutado la aplicación en un dispositivo de Gingerbread real, noto que la actividad de Google Maps parece soportar pellizcar para acercar, mientras que la de Osmdroid no.

No he escrito ningún código específico para pellizcar para ampliar para el lado de Google o para Osmdroid. Ambas actividades implementan OnTouchListener. Ambas actividades sólo tienen un talón de OnTouch como:

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

Mi MapView en la actividad Osmdroid es de la clase: org.osmdroid.views.MapView

¿Alguien sabe cómo hacer que pellizcar para ampliar ¿trabajo con osmdroid o conozco una aplicación de muestra que use osmdroid que pueda estudiar y adaptar a mi aplicación?

Respuesta

3

Osmdroid tiene la funcionalidad para ampliar. Tendrá que configurar un gestor de escucha para comprobar la acción de pellizco, en cuyo punto debe llamar a la función de zoom en osmdroid. Creo en osmdroid 3.0.5 es algo así como

mOsm.getController.setZoomLevel(someNumber) (mOsm es una instancia de la vista de mapa).

Tengo la función de zoom funcionando para el pellizco opuesto (los dedos se juntan y luego se expanden). Se sugiere emplear una MotionEvent (como se está haciendo actualmente) y hacer algo como esto:

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; 
} 

El código que he añadido ofertas con el pellizco - el booleano final es algo que he implementado en mi programa de averiguar cuándo actualizar el mapa Eso debería ayudarte más.

Here es una explicación más detallada de esto.

Si está buscando algo diferente, intente leer here. Android ha estado apoyando la acción de pellizco desde junio de 2010 aparentemente.

+0

Gracias por la información. Creo que los enlaces serán útiles. Supongo que la actividad de Google Maps (MapsActivity) debe implementar el pinch detrás de escena. Por supuesto, su código es de código cerrado, por lo que parece que tendré que trabajar un poco en lugar de solo copiar su implementación. +1 para los enlaces. – NickT

+0

Experimenté con él en mi programa, y ​​el código anterior funciona para mí. Si eso es más útil, entonces ++! – digerati32

+2

¡Hubiera funcionado de inmediato si no fuera un IDIOTA! Me perdí la línea mMapVw.setMultiTouchControls (true); Ciertamente no voy a responder mi propia pregunta con eso. Para evitar que otros pierdan su tiempo y en agradecimiento por haberme hecho pensar, aceptaré su respuesta. – NickT

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

Funciona, aunque se implementó mal. – Warpzit

+5

He encontrado que parece que se está acercando el zoom cuando estoy moviendo mis dos dedos, pero tan pronto como los elevo, el mapa salta a una posición diferente. @Warpzit ¿Es esto lo que quisiste decir con "implementado mal"? –

+0

@DavidDoria sí, no funciona como se esperaba :) – Warpzit

2

Es posible no acercar al centro del mapa sino a la mitad de los usuarios dos dedos.

+0

¿has encontrado una buena solución? en caso afirmativo, responda mi pregunta http://stackoverflow.com/questions/15626091/osmdroid-and-pinch –

+0

desafortunada no, pero hice la pregunta aquí, y tal vez algún día se resuelva :) http: // stackoverflow. com/questions/15159544/two-finger-or-pinc-zoom-to-mapview-in-osmdroid – ismail

Cuestiones relacionadas