Hola?
Estoy trabajando en un MapView aplicación en Android. Tengo tres marcadores que quiero ser capaz de utilizar el Google Map API getlocation-función, más adelante. Con el fin de probarlo me gustaría mover el marcador con un arrastrar y soltar función y, a continuación, compruebe la ubicación.

Cualquier persona que ha conseguido arrastrar y soltar para trabajar en un android marcador, o conocer una manera de empezar a averiguar lo que ocurría?

/AK

OriginalEl autor kakka47 | 2010-10-09

5 Comentarios

  1. 24

    Aquí es un proyecto de ejemplo de uno de mis libros mostrando arrastrar-y-soltar el movimiento de los marcadores en un Mapa de Google en Android.

    En pocas palabras, se utiliza onTouchEvent() para detectar cuando el usuario toque y mantenga su dedo cerca de un marcador. A continuación, quita el marcador de la superposición, sino que pone la misma imagen sobre la parte superior del mapa con RelativeLayout. A continuación, en «mover» eventos de toque, la imagen se mueve (más rápido que forzar a toda la superposición de volver a dibujar). Cuando el dedo se levanta, la imagen se quita, pero el marcador se vuelve a poner en la superposición en el nuevo lugar.

    Muchas gracias por el enlace y la explicación! Soy nuevo en Android, por lo que es bueno para mí para ver la estructura de un proyecto de trabajo, para tener una idea de cómo hacer las cosas de verdad y no acaba de lanzar cosas. Gracias.
    Thnx man, esto realmente ayudó a
    Creo que esta anticuado ans ahora. bcoz v2 dosenot apoyo de superposición.¿Tienes algo para V2 también
    Ver UrMi de ayuda para el enfoque de los Mapas V2. Esta respuesta es para los Mapas de V1, el original de Android mapa de la solución.

    OriginalEl autor CommonsWare

  2. 42

    Implementar Google Maps Android API v2, se refieren a esto: https://developers.google.com/maps/documentation/android/ y establecer en GoogleMap objeto setOnMarkerDragListener. Por Ejemplo:

    map.setOnMarkerDragListener(new OnMarkerDragListener() {
            @Override
            public void onMarkerDragStart(Marker arg0) {
                //TODO Auto-generated method stub
                Log.d("System out", "onMarkerDragStart..."+arg0.getPosition().latitude+"..."+arg0.getPosition().longitude);
            }
    
            @SuppressWarnings("unchecked")
            @Override
            public void onMarkerDragEnd(Marker arg0) {
                //TODO Auto-generated method stub
                Log.d("System out", "onMarkerDragEnd..."+arg0.getPosition().latitude+"..."+arg0.getPosition().longitude);
    
                map.animateCamera(CameraUpdateFactory.newLatLng(arg0.getPosition()));
            }
    
            @Override
            public void onMarkerDrag(Marker arg0) {
                //TODO Auto-generated method stub
                Log.i("System out", "onMarkerDrag...");
            }
        });
    
    //Don't forget to Set draggable(true) to marker, if this not set marker does not drag.
    
    map.addMarker(new MarkerOptions().position(crntLocationLatLng).icon(BitmapDescriptorFactory .fromResource(R.drawable.icon_my_location)).draggable(true));
    de cualquier manera para permitir el arrastre de la mp en el grifo en lugar de pulsación larga ?
    No. Debido a que toque va a realizar onMarkerClick para el marcador de la ventana de información para abrir y es el comportamiento por defecto así que no se puede modificar este evento.

    OriginalEl autor UrMi

  3. 4

    Para MapsV2. Utiliza el mapa de google eventos. No escriba su propia.

            mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
                @Override
                public void onMapClick(LatLng latLng) {
                    mVisitingMarker.setPosition(latLng);
                    mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
                }
            });
    
            mMap.setOnMarkerDragListener(new GoogleMap.OnMarkerDragListener() {
                @Override
                public void onMarkerDragStart(Marker arg0) {
                }
    
                @SuppressWarnings("unchecked")
                @Override
                public void onMarkerDragEnd(Marker arg0) {
                   Log.d("System out", "onMarkerDragEnd...");
                    mMap.animateCamera(CameraUpdateFactory.newLatLng(arg0.getPosition()));
                }
    
                @Override
                public void onMarkerDrag(Marker arg0) {
                }
            });

    OriginalEl autor F.O.O

  4. 1

    He encontrado un poco de optimización para el CommonsWare arrastrar y soltar brillante función.

    Yo estaba haciendo algunas precisa meashurements con marcadores en mi mapa, y yo quería que mi marcador a estar exactamente en el lugar que me tocó y levantó el dedo para el meashurment fue exactamente precisas.

    Sobre el original de CommonsWare si toca «cerca de» el marcador, el marcador no ir a ese punto exacto, sino que se mueve a lo largo de con el dedo del movimiento.
    Necesitaba el marcador a aparecer justo debajo de mi dedo en el ACTION_DOWN, ACTION_MOVE y ACTION_UP.

    Aquí está el código si alguien necesita de ti. Tengo que agradecer a CommonsWare para realizar esta función, es realmente una buena idea.

    Esta es la parte del código que he modificado.

    Mi MapView es el mapa;

            @Override
    public boolean onTouchEvent(MotionEvent event, MapView mapView) {
    final int action=event.getAction();
    final int x=(int)event.getX();
    final int y=(int)event.getY();
    boolean result=false;
    if (action==MotionEvent.ACTION_DOWN) {
    for (OverlayItem item : mOverlays) {
    Point p=new Point(0,0);
    mapa.getProjection().toPixels(item.getPoint(), p);
    //I maintain the hitTest's bounds so you can still
    //press near the marker
    if (hitTest(item, marker, x-p.x, y-p.y)) {
    result=true;
    inDrag=item;
    mOverlays.remove(inDrag);
    populate();
    //Instead of using the DragImageOffSet and DragTouchOffSet
    //I use the x and y coordenates from the Point
    setDragImagePosition(x, y);
    dragImage.setVisibility(View.VISIBLE);
    break;
    }
    }
    }
    else if (action==MotionEvent.ACTION_MOVE && inDrag!=null) {
    setDragImagePosition(x, y);
    result=true;
    }
    else if (action==MotionEvent.ACTION_UP && inDrag!=null) {
    dragImage.setVisibility(View.GONE);
    //I get the geopoint without using any OffSet, directly with the 
    //Point coordenates
    GeoPoint pt=mapa.getProjection().fromPixels(x,y);
    OverlayItem toDrop=new OverlayItem(pt, inDrag.getTitle(),
    inDrag.getSnippet());
    orig = inDrag.getMarker(0);
    //In my case I had down heading Arrows as markers, so I wanted my 
    //bounds to be at the center bottom
    toDrop.setMarker(boundCenterBottom(orig));
    mOverlays.add(toDrop);
    populate();
    inDrag=null;
    result=true;
    }
    return(result || super.onTouchEvent(event, mapView));
    }
    private void setDragImagePosition(int x, int y) {
    RelativeLayout.LayoutParams lp=
    (RelativeLayout.LayoutParams)dragImage.getLayoutParams();
    //Instead of using OffSet I use the Point coordenates.
    //I want my arrow to appear pointing to the point I am moving, so 
    //I set the margins as the Point coordenates minus the Height and half the
    //width of my arrow.
    lp.setMargins(x-(dragImage.getWidth()/2),y-dragImage.getHeight(), 0, 0);
    dragImage.setLayoutParams(lp);
    }

    Con esto se obtiene la flecha que aparece cuando pulsa con el, en lugar de la flecha para moverse de donde estaba.

    OriginalEl autor Alex89Spain

  5. 0

    Aquí es el código Completo de Arrastrar Y Soltar el pasador en el Mapview en Android

    El enlace está roto
    Hola, te hiciste con el arrastrar y soltar en el mapa?
    Yo no trato
    D Enlace roto para el código fuente y artículo.
    fue un enlace roto

    OriginalEl autor Ashok Domadiya

Dejar respuesta

Please enter your comment!
Please enter your name here