Me las arreglé para conseguir el mapa que se muestra en la pantalla. Ahora el usuario se mueve alrededor del mapa y pulse sobre ella. Después de pulsar sobre un punto que tengo que agregar una chincheta en la pantalla en el prensado de ubicación. Si el usuario decide ir a otro punto, al pulsar sobre el punto elegido, el primer marcador iba a desaparecer y uno nuevo será dibujado en la nueva ubicación

Yo lo hice así:

public class LocationSelectionActivity extends MapActivity 
{    
GeoPoint p;
List<Overlay> listOfOverlays;
MapOverlay mapOverlay;
private MapView mapView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) 
{
super.onCreate(savedInstanceState);
setContentView(R.layout.locationselection);
mapView = (MapView) findViewById(R.id.mapView);
mapView.setSatellite(false);
final MapController mc = mapView.getController();
String coordinates[] = {"46.540606", "22.454542"};
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(10); 
ZoomControls zoomControls = (ZoomControls) findViewById(R.id.zoomcontrols);
zoomControls.setOnZoomInClickListener(new View.OnClickListener() {
public void onClick(View v) {
mc.zoomIn();
}
});
zoomControls.setOnZoomOutClickListener(new View.OnClickListener() {
public void onClick(View v) {
mc.zoomOut();
}
});
//---Add a location marker---
mapOverlay = new MapOverlay();
listOfOverlays = mapView.getOverlays();
listOfOverlays.clear();
listOfOverlays.add(mapOverlay);
mapView.invalidate();
}
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.map_flag);            
canvas.drawBitmap(bmp, screenPts.x, screenPts.y-48, 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());
Toast.makeText(getBaseContext(), 
p.getLatitudeE6() / 1E6 + "," + 
p.getLongitudeE6() /1E6 , 
Toast.LENGTH_SHORT).show();
}                            
return false;
}        
} 

Esto hace que la inicial marcador (map_flag de recursos). Al hacer clic en el mapa me sale el pan con el coordonates… todo queda por hacer es en un nuevo clic, borrar el pin antiguo y añadir una nueva.

Pero ¿cómo hacerlo ?

OriginalEl autor Alin | 2010-09-12

3 Comentarios

  1. 15

    Me gustaría utilizar un ItemizedOverlay, en lugar de regular Overlay. Entonces, todo lo que usted necesita hacer es actualizar su colección de OverlayItem objetos y llame a populate() en el ItemizedOverlay.

    Aquí es un proyecto de ejemplo mostrando arrastrar-y-gota de un pin con ItemizedOverlay.

    hola , quiero m llegar a un punto cuando busco el lugar, pero lo que yo quiero hacer es que si quiero cambiar el lugar que está cerca de ese lugar mediante la selección de ese punto, ¿cómo puedo hacer me puede ayudar por favor

    OriginalEl autor CommonsWare

  2. 3

    Este código está funcionando bien .

    @Override 
    public boolean onTap(GeoPoint p, MapView mapView) {
    Log.d("tap event ", "tap called");
    mapOverlays = mapView.getOverlays();
    drawable  =getResources().getDrawable(R.drawable.marker);
    itemizedOverlay = new SitesOverlay(drawable);
    int lat=(int)p.getLatitudeE6();
    int lng=(int)p.getLongitudeE6();
    GeoPoint point = new GeoPoint(lat,lng);
    Log.d("tap event ", "tapcalled"+lat+""+lng);
    OverlayItem overlayitem = new OverlayItem(point, "", "");
    items.add(overlayitem);
    populate();
    Log.d("tap event ", "populated");
    //     mapOverlays.add(itemizedOverlay);   
    return true;
    }

    OriginalEl autor Naveed

  3. 1
    @Override
    public boolean onTouchEvent(MotionEvent event, MapView mapView) 
    {   
    //---when user lifts his finger---
    if (event.getAction() == 1) {                
    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;
    }        

    Este trabajo. Hacer OnTouchEvent del GeoPoint Público…

    Esto no agregar un overlayItem…

    OriginalEl autor N.Droid

Dejar respuesta

Please enter your comment!
Please enter your name here