2011-03-13 36 views
9

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 desplazarse/hacer clic en la pantalla. Soy nuevo en Java y Android, así que creo que tiene algo que ver con mi falta de conocimiento de la codificación en Java. Aquí está mi códigoAdición de detectores de eventos táctiles a MapView

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 consigo que funcione?

Respuesta

10

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

Puede hacerlo agregando 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.

+1

Gracias! Soy nuevo en Java, así que sigo deslizándose. – Achint

+0

¡De nada! ;) – Flo

3
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; 
     }**   
    }** 
} 
+0

código completo está aquí http://mobiforge.com/developing/story/using-google-maps-android?page=1 – vnshetty

+0

¿Por qué hacer un SuppressWarnings por obsoleto? – brunoais

Cuestiones relacionadas