Nella mia applicazione è necessario visualizzare un "google" indicatore di google liscio da un punto all'altro. Io uso il seguente metodo per l'animazione:Come correggere spostando il marker in google maps v2?
public void animateMarker(final Marker marker, final LatLng toPosition,
final boolean hideMarker) {
final Handler handler = new Handler();
final long start = SystemClock.uptimeMillis();
Projection proj = mMap.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);
}
}
}
});
}
Ma come risultato di creare semplicemente un nuovo marcatore nella nuova posizione (anche se vecchio non viene rimosso):
Penso che sia necessario dire alla vista di ridisegnarsi dopo aver cambiato una posizione e prima di iniziare ad aspettare. – kaho
Intendevi un indicatore di cancellazione e ne aggiungi uno nuovo con una nuova posizione? – Rexhaif
Per quanto ne so, per risparmiare risorse, Android non disegna lo schermo fino alla fine del ciclo ... quindi devi dire al sistema che vuoi ridisegnare lo schermo. Sembra che questo potrebbe aiutare: http://developer.android.com/reference/android/view/View.html#invalidate(android.graphics.Rect) – kaho