2010-11-14 25 views
14

Estoy tratando de hacer algo como esto: Tengo una actividad de mapa y cuando el usuario toca el mapa muestra las coordenadas de esa ubicación. Ya anulé el método onclick pero ni siquiera se llama. ¿Alguna idea?Obtener coordenadas al tocar el mapa en android

public class MapPoint extends MapActivity implements OnClickListener { 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mappoints); 

    MapView map = (MapView)findViewById(R.id.mapview); 
    map.setOnClickListener(this); 
    map.setBuiltInZoomControls(true); 
    map.getController().setZoom(18); 
    map.getController().setCenter(new GeoPoint(39735007, -8827330)); 


} 

@Override 
protected boolean isRouteDisplayed() { 
    // TODO Auto-generated method stub 
    return false; 
} 

public void onClick(View arg0) { 
     Toast.makeText(this, "text", Toast.LENGTH_SHORT); 
} 

}

+0

[esto ayudará seguro ..] (http://stackoverflow.com/a/9477079/1151312) – cyclopes49

Respuesta

17

Intente lo siguiente.

Escriba una clase que se deriva de la clase Overlay y anule el método onTap(). Luego puede agregar su superposición a su MapView. Un objeto GeoPoint, que representa la posición de su toque, se pasa al método onTap() cuando se busca en alguna parte del mapa.

+0

Gracias, es excelente! –

+0

+1 Esto funciona exactamente como se esperaba. – hendrix

7

onClick() no se utiliza aquí. Tendrá que anular onTouchEvent(). Here is a sample project mostrando usando onTouchEvent() para arrastrar y soltar ItemizedOverlay pins del mapa.

Dadas las coordenadas de la pantalla del toque, puede usar un Projection (desde getProjection() en MapView) para convertir eso a latitud y longitud.

2

puse algunos detalles de mi aplicación en esta pregunta: How do I respond to a tap on an Android MapView, but ignore pinch-zoom?

El problema que nos encontramos con el uso Ontap() es que también se activa cuando se pellizcaste, que no era lo que necesitaba mi aplicación. Entonces, si necesitas un zoom pellizco, mi código debería hacer lo que necesites.

2

Prueba esto:

private class OverlayMapa extends Overlay { 

@Override 
public void draw(Canvas canvas, MapView mapView, boolean shadow) 
{ 
    ... 
} 

@Override 
public boolean onTap(GeoPoint point, MapView mapView) 
{ 
    Context contexto = mapView.getContext(); 
    String msg = "Lat: " + point.getLatitudeE6()/1E6 + " - " + 
       "Lon: " + point.getLongitudeE6()/1E6; 

    Toast toast = Toast.makeText(contexto, msg, Toast.LENGTH_SHORT); 
    toast.show(); 

    return true; 
} 
} 
Cuestiones relacionadas