web-dev-qa-db-fra.com

Comment changer la position d'un marqueur sur un Android Map v2

Je dois faire ce qui suit: J'ai un marqueur sur la carte et je dois changer sa position. J'ai donc essayé ce qui suit:

MarkerOptions a = new MarkerOptions()
            .position(new LatLng(50,6)));
        map.addMarker(a);
        a.position(new LatLng(50,5));

où map est une GoogleMap. Je pense que je dois rafraîchir la carte ou quelque chose d'égal?

23
gurehbgui

Trouvé la solution, Besoin de le faire comme ça:

MarkerOptions a = new MarkerOptions()
    .position(new LatLng(50,6)));
Marker m = map.addMarker(a);
m.setPosition(new LatLng(50,5));
70
gurehbgui

Il existe un exemple de marqueur de déplacement dans l'application de démonstration google map v2. Dans le fichier adt-bundle-linux/sdk/extras/google/google_play_services/samples/maps/src/com/exa‌​mple/mapdemo/MarkerDemoActivity.Java (exemples 4.2.2) 

Voici le code pour déplacer un marqueur:

 public void animateMarker(final Marker marker, final LatLng toPosition,
            final boolean hideMarker) {
        final Handler handler = new Handler();
        final long start = SystemClock.uptimeMillis();
        Projection proj = mGoogleMapObject.getProjection();
        Point startPoint = proj.toScreenLocation(marker.getPosition());
        final LatLng startLatLng = proj.fromScreenLocation(startPoint);
        final long duration = 500;

        final Interpolator interpolator = new LinearInterpolator();

        handler.post(new Runnable() {
            @Override
            public void run() {
                long elapsed = SystemClock.uptimeMillis() - start;
                float t = interpolator.getInterpolation((float) elapsed
                        / duration);
                double lng = t * toPosition.longitude + (1 - t)
                        * startLatLng.longitude;
                double lat = t * toPosition.latitude + (1 - t)
                        * startLatLng.latitude;
                marker.setPosition(new LatLng(lat, lng));

                if (t < 1.0) {
                    // Post again 16ms later.
                    handler.postDelayed(this, 16);
                } else {
                    if (hideMarker) {
                        marker.setVisible(false);
                    } else {
                        marker.setVisible(true);
                    }
                }
            }
        });
    }

ce code animera le marqueur d'un géopoint à un autre.

21
K_Anas

La plupart des réponses sur StackOverflow suggèrent d'utiliser remove() pour supprimer le marqueur, puis en créer un nouveau en utilisant addMarker. Au lieu de cela, enregistrez simplement le marqueur une fois dans une variable de type Marker, puis mettez à jour son emplacement. 

MarkerOptions a = new MarkerOptions().position(new LatLng(50,6))); 
myMarker = mGoogleMap.addMarker(a);

Et puis au lieu de supprimer et de recréer un marqueur, utilisez simplement 

myMarker.setPosition(newLatLng);  

J'espère que cela t'aides !!

12
Yankee

Définir "marqueur" en dehors de la fonction. pour la première fois, il sera nul et la condition "if" sera exécutée. pour la deuxième fois, "else" sera exécuté.

        Marker marker = null;    
        protected void onPostExecute(Coordinates coordinates) {
        LatLng latLong = new LatLng("lat", "long");
        if (marker == null) {
            MarkerOptions options = new MarkerOptions().position(latLong)
                    .title("Marker Title");
            marker = mMap.addMarker(options);
        }
        else {
            marker.setPosition(latLong);
        }
     mMap.moveCamera(CameraUpdateFactory.newLatLng(latLong));
     mMap.animateCamera(CameraUpdateFactory.zoomTo(16f));
    }
0
Muhammad Haroon