zu drehen Ich implementiere die Animationen für die Gruppe von Autos (Marker) gleichzeitig in Google Map v2 zu drehen.Animationen für die Gruppe von Markern zur gleichen Zeit in Google Maps v2 Android
, so dass ich meinen Animationsteil innerhalb der Methode handler.post() codieren muss.
Dadurch wird der Animationsteil (handler.post() -Methode) nur für einen Marker ausgeführt.
ich habe die handler.post() -Methode in der FOR-Schleife codiert. Es läuft nur zum ersten Mal, was bedeutet, dass nur ein Marker rotiert. danach funktioniert es nicht. Mein Code ist wie folgt.
private void animateCarsInMarkers(final MarkerOptions mark, final long bearing, final LatLng startPosition, final int position){
final Handler handler = new Handler();
final long start = SystemClock.uptimeMillis();
final long duration = 3000;
final Interpolator interpolator = new LinearInterpolator();
final Marker marker = mGoogleMap.addMarker(mark);
final float rotationValue = Float.parseFloat(String.valueOf(bearing));
try {
if(tempCarsArray != null && !tempCarsArray.isEmpty()){
sLongitude = tempCarsArray.get(position).getDouble(LONGITUDE);
sLatitude = tempCarsArray.get(position).getDouble(LATITUDE);
sBearing = tempCarsArray.get(position).getLong("Bearing");
final double dLongitude = startPosition.longitude;
final double dLatitude = startPosition.latitude;
handler.post(new Runnable() {
@Override
public void run() {
long elapsed = SystemClock.uptimeMillis() - start;
float time = interpolator.getInterpolation((float) elapsed/duration);
double lng = time * dLongitude + (1 - time) * sLongitude;
double lat = time * dLatitude + (1 - time) * sLatitude;
float rotationValue = time * dbearing + (1-time) * sBearing;
marker.setRotation((-rotationValue > 180) ? (rotationValue/2) : rotationValue);
marker.setPosition(new LatLng(lat, lng));
if (time < 1.0) {
handler.postDelayed(this, 16);
}
}
});
tempCarsArray.clear();
} else {
marker.setPosition(startPosition);
marker.setRotation(-rotationValue > 180 ? rotationValue/2 : rotationValue);
}
}catch (JSONException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
Dies ist die Methode, die ich innerhalb for-Schleife genannt. Aber es läuft nur zum ersten Mal in Schleife. Später funktioniert es nicht. Daher wird nur ein Marker unter der Gruppe der Marker animiert. Meine for-Schleife ist wie folgt:
for(int i=0; i<size; i++){
animateCarsInMarkers(mark, bearing, latLng, i);
}
Diese Schleife läuft nur, wenn der Wert von i = 0 und es nicht wieder ausgeführt wird. Vielen Dank im Voraus.
Danke für Ihre Lösung. Für mich geht das. Ich habe meinen Fehler korrigiert, nur wegen der Größe. Aber immer noch ist nur ein Marker animiert. Könnten Sie mir irgendwelche Möglichkeiten vorschlagen ** eine Gruppe von Markern gleichzeitig zu animieren **. @newguy –
Vergessen Sie nicht, die Antwort zu akzeptieren oder zu erhöhen, um anzuzeigen, dass es für Sie funktioniert hat. Nun, für die folgende Frage ist hier ein [SO-Thread] (http://stackoverflow.com/questions/14864664/animating-markers-on-google-maps-v2), der helfen könnte. Video-Demo und Code enthalten. – noogui