In meiner Anwendung muss eine reibungslose "verschieben" Google Maps-Marker von einem Punkt zum anderen zeigen. Ich verwende die folgende Methode für die Animation:Wie korrigieren Sie das Verschieben des Markers 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);
}
}
}
});
}
Aber als Ergebnis einfach einen neuen Marker an den neuen Standort zu schaffen (wenn auch alten nicht entfernt wird):
Ich denke, Sie müssen die Ansicht neu zu zeichnen, nachdem Sie eine Position ändern, und bevor Sie zu warten beginnen. – kaho
Meinen Sie einen Löschmarker und fügen Sie einen neuen mit neuer Position hinzu? – Rexhaif
Soweit ich weiß, zeichnet Android den Bildschirm erst ab, wenn die Schleife beendet ist, um Ressourcen zu sparen. Sie müssen also dem System mitteilen, dass Sie den Bildschirm neu zeichnen möchten. Scheint so, als würde das helfen: http://developer.android.com/reference/android/view/View.html#invalidate(android.graphics.Rect) – kaho