Adición de oyentes de evento táctil a MapView

Así que quiero devolver la ubicación geográfica de cualquier punto que toque en el mapa, pero mi código simplemente no hace nada al mover a través de / haciendo clic en la pantalla. Soy nuevo en Java, así como Android, así que creo que es algo que ver con mi falta de conocimiento de la codificación en java. Aquí está mi código

package sdpd.loc; import sdpd.loc.createNote.mapOverlay; import com.google.android.maps.GeoPoint; import com.google.android.maps.MapActivity; import com.google.android.maps.MapView; import android.os.Bundle; import android.view.MotionEvent; import android.widget.Toast; import android.app.Activity; public class createNote extends MapActivity { @Override protected boolean isRouteDisplayed() { return false; } @Override public void onCreate(Bundle savedInstanceStates){ super.onCreate(savedInstanceStates); setContentView(R.layout.map); MapView mapview=(MapView)findViewById(R.id.MapView); mapview.setBuiltInZoomControls(true); } class mapOverlay extends com.google.android.maps.Overlay{ @Override public boolean onTouchEvent(MotionEvent event, MapView mapview){ if (event.getAction()==1){ GeoPoint p=mapview.getProjection().fromPixels((int)event.getX(), (int)event.getY()); Toast.makeText(getBaseContext(),p.getLatitudeE6()/1E6 + "," + p.getLongitudeE6()/1E6, Toast.LENGTH_SHORT).show(); } return false; } } 

}

¿Cómo puedo conseguir que funcione?

No ha registrado su clase de superposición personalizada mapOverlay (los nombres de las clases btw comienzan siempre con una letra mayúscula en Java) al MapView. Realice esto creando una instancia de la clase y agregándola a la colección de superposiciones de MapView.

Puede hacerlo añadiendo el siguiente código al método onResume () de su actividad.

 public void onCreate(Bundle savedInstanceStates){ super.onCreate(savedInstanceStates); setContentView(R.layout.map); MapView mapview=(MapView)findViewById(R.id.MapView); mapview.setBuiltInZoomControls(true); mapOverlay myOverlay = new mapOverlay(); List<Overlay> overlays = mMapView.getOverlays(); overlays.add(myOverlay); } 

Ahora, su superposición está registrada y los eventos táctiles deben procesarse.

 public class GoogleMap extends MapActivity { MapView mapView; MapController mc; GeoPoint p; /** Called when the activity is first created. */ @SuppressWarnings("deprecation") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mapView = (MapView) findViewById(R.id.mapview); mapView.setStreetView(true); LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom); View zoomView = mapView.getZoomControls(); zoomLayout.addView(zoomView, new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); mapView.displayZoomControls(true); mc = mapView.getController(); String coordinates[] = {"23.0504926", "72.528938925"}; double lat = Double.parseDouble(coordinates[0]); double lng = Double.parseDouble(coordinates[1]); p = new GeoPoint( (int) (lat * 1E6), (int) (lng * 1E6)); mc.animateTo(p); mc.setZoom(17); //---Add a location marker--- MapOverlay mapOverlay = new MapOverlay(); List<Overlay> listOfOverlays = mapView.getOverlays(); listOfOverlays.clear(); listOfOverlays.add(mapOverlay); mapView.invalidate(); } @Override protected boolean isRouteDisplayed() { return false; } class MapOverlay extends com.google.android.maps.Overlay { @Override public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) { super.draw(canvas, mapView, shadow); //---translate the GeoPoint to screen pixels--- Point screenPts = new Point(); mapView.getProjection().toPixels(p, screenPts); //---add the marker--- Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.marker); canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null); return true; } ****@Override public boolean onTouchEvent(MotionEvent event, MapView mapView) { //---when user lifts his finger--- if (event.getAction() == 1) { GeoPoint p = mapView.getProjection().fromPixels( (int) event.getX(), (int) event.getY()); Geocoder geoCoder = new Geocoder( getBaseContext(), Locale.getDefault()); try { List<Address> addresses = geoCoder.getFromLocation( p.getLatitudeE6() / 1E6, p.getLongitudeE6() / 1E6, 1); String add = ""; if (addresses.size() > 0) { for (int i=0; i<addresses.get(0).getMaxAddressLineIndex(); i++) add += addresses.get(0).getAddressLine(i) + "\n"; } Toast.makeText(getBaseContext(), add, Toast.LENGTH_SHORT).show(); } catch (IOException e) { e.printStackTrace(); } return true; } else return false; }** }** } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.