0

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.

Antwort

0

Wenn Ihr 'for loop' nur einmal ausgeführt wurde, bedeutet dies, dass Ihr "For-Loop-Bedingungsteil" i<size für diese Instanz die Bedingung bereits erfüllt hat. Was ich vorschlagen würde, ist für Sie, um "Größe" tatsächlich zu protokollieren und seinen Wert zu überprüfen.

Wenn Sie the size of an array suchen, benutzen Sie tempCarsArray.length wie:

for(int i=0; i < tempCarsArray.length; i++){ 
    animateCarsInMarkers(mark, bearing, latLng, i); 
} 

Um zu überprüfen, ob size das Problem verursacht, versuchen Sie dies.

Wenn Sie die tatsächliche Anzahl der Marker wissen Sie erwarten zu drehen, versuchen Sie jetzt mit einer ganzen Zahl zu ersetzen, wie:

//if you're expecting 5 markers 
for(int i=0; i < 5 ; i++){ 
    animateCarsInMarkers(mark, bearing, latLng, i); 
} 

Wenn alle Markierungen drehen haben, bedeutet dies, Ihre Größe Variable hat nur ein Wert von 1.

+0

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 –

+0

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

Verwandte Themen