Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


MapView añadiendo botones al toque

Me las arreglé para conseguir el mapa mostrado en la pantalla. Ahora el usuario se mueve alrededor del mapa y presiona sobre él. Después de presionar un punto necesito agregar un pin de empuje en la pantalla en la ubicación presionada. Si el usuario decide ir a otro punto, al presionar el punto elegido, el primer pasador desaparecerá y se dibujará otro nuevo en la nueva ubicación

Me gustó esto:

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 dibuja el puntero inicial (el recurso map_flag). Al hacer clic en el mapa obtengo el Toast con las coordenadas … todo lo que queda por hacer es en un nuevo clic, borre el alfiler antiguo y añada uno nuevo.

Pero como hacerlo ?

  • Tamaño del marcador mapview android
  • Android - ¿Qué archivo debug.keystore es IntelliJ firmando mi aplicación?
  • Android My Location-Fix
  • ¿Debo usar android LocationManager.getBestProvider cada vez que solicito actualizaciones de ubicación?
  • Usar la API de Google Maps de Google para mostrar una capa de Mapa de Calor
  • ¿Google Maps Android MapView utiliza distintos mosaicos de resolución para diferentes densidades de pantalla?
  • Reemplazo de Android Mapview para utilizar un servicio WMS
  • GestureDetector Problema reprobado
  • 3 Solutions collect form web for “MapView añadiendo botones al toque”

    Yo usaría un ItemizedOverlay , en lugar de una Overlay regular. A continuación, todo lo que necesita hacer es actualizar su colección de objetos OverlayItem y llame a populate() en ItemizedOverlay .

    Aquí hay un ejemplo de proyecto que muestra arrastrar y soltar un pin usando ItemizedOverlay .

    Este código funciona 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; } 
     @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; } 

    Esto funcionará. Haga que GeoPoint de OnTouchEvent sea público …

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.