Autore Topic: Animazione mappe  (Letto 520 volte)

Offline minomic

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: +2
    • Mostra profilo
Animazione mappe
« il: 23 Settembre 2013, 19:41:06 CEST »
0
Ciao a tutti, sto realizzando una piccola applicazione che mostra la posizione dell'utente su una mappa e lo segue durante il percorso, animando la mappa in modo molto simile all'app Navigatore di Google. Il problema è questo: la mappa non sembra riuscire a caricarsi dopo l'animazione. Però se, ad esempio, faccio uno zoom indietro/avanti o uno spostamento manuale (trascinando il dito) ecco che la mappa si carica magicamente. Quindi presumo che queste azioni richiamino qualche metodo particolare che dovrei richiamare anche io.
Posto il codice del metodo onLocationChanged

Codice (Java): [Seleziona]
@Override
        public void onLocationChanged(Location location) {
                if(mProgressDialog != null) mProgressDialog.dismiss();

                if(myToggleButton.isChecked()) {
                        // Animate the camera to the location found and set the orientation according to the direction the user is travelling towards
                        cp = new CameraPosition(new LatLng(location.getLatitude(), location.getLongitude()), (float) 18.0, (float) 0.0, location.getBearing());
                        mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cp));
                }

                //Move the marker to the position found
                marker.setPosition(new LatLng(location.getLatitude(), location.getLongitude()));
        }

Qualcuno ha qualche idea?

Post unito: 23 Settembre 2013, 22:29:23 CEST
Ho provato anche così ma il problema rimane.

Codice (Java): [Seleziona]
@Override
        public void onLocationChanged(Location location) {
                if(mProgressDialog != null) mProgressDialog.dismiss();

                if(myToggleButton.isChecked()) {
                        // Animate the camera to the location found and set the orientation according to the direction the user is travelling towards
                        cp = new CameraPosition.Builder().target(new LatLng(location.getLatitude(), location.getLongitude()))
                                        .zoom(18.0f)
                                        .bearing(0)
                                        .tilt(0)
                                        .build();
                        mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cp), null);
                }

                //Move the marker to the position found
                marker.setPosition(new LatLng(location.getLatitude(), location.getLongitude()));
        }

Post unito: 23 Settembre 2013, 22:45:28 CEST
Ho finalmente trovato il problema! Sospettavo che fosse causato dal metodo onLocationChanged che viene richiamato molto spesso e non dà quindi alla mappa il tempo di aggiornarsi, quindi ho fatto questo test: ho dichiarato una variabile

Codice (Java): [Seleziona]
private int count = 0;
Quindi ho modificato il metodo in questione in questo modo:

Codice (Java): [Seleziona]
@Override
        public void onLocationChanged(Location location) {
                if(mProgressDialog != null) mProgressDialog.dismiss();

                if((count % 1000) == 0) {

                        if(myToggleButton.isChecked()) {
                                // Animate the camera to the location found and set the orientation according to the direction the user is travelling towards
                                cp = new CameraPosition.Builder().target(new LatLng(location.getLatitude(), location.getLongitude()))
                                                .zoom(18.0f)
                                                .bearing(location.getBearing())
                                                .tilt(0)
                                                .build();
                                mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cp), null);
                        }
                }
                count++;

                //Move the marker to the position found
                marker.setPosition(new LatLng(location.getLatitude(), location.getLongitude()));
        }

forzandolo così ad essere richiamato meno spesso. Risultato: nessun problema! Ora si tratta solo di trovare un modo elegante per scriverlo. In particolare si dovrebbe fare un controllo per capire se la mappa ha finito di caricarsi oppure no. Se qualcuno ha qualche suggerimento è assolutamente ben accetto! :)

Post unito: 23 Settembre 2013, 23:35:13 CEST
PROBLEMA RISOLTO
Alla fine ho risolto il problema completamente: per controllare se la mappa è caricata completamente (i.e. se l'animazione è terminata) utilizzo un booleano il cui valore viene impostato nel metodo onFinish di una CancelableCallback passata al metodo animateCamera.
Segnalo il problema come risolto. ;)
« Ultima modifica: 23 Settembre 2013, 23:35:13 CEST da minomic, Reason: Merged DoublePost »