0

Я реализую анимацию для группы автомобилей (маркеров) для одновременного вращения в google map v2.Анимация для группы маркеров для одновременного вращения в google maps v2 android

, так что мне нужно закодировать мою часть анимации внутри метода handler.post().

Выполнение этого метода анимации (метод handler.post()) выполняется только для одного маркера.

У меня закодированный метод handler.post() внутри цикла for. Он работает только в первый раз, что означает, что только один маркер вращается. после этого он не работает. Мой код выглядит следующим образом.

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(); 
    } 
} 

Это метод, который я назвал внутри для цикла. Но он работает только в первый раз в цикле. Позже он не работает. Таким образом, только один маркер анимируется среди группы маркеров. Мой цикл петли выглядит следующим образом:

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

Этот цикл работает только тогда, когда значение i = 0, и оно не будет работать снова. Спасибо заранее.

ответ

0

Если ваш 'for loop' работает только один раз, это означает, что ваша «часть условия для цикла», i<size для этого экземпляра, уже выполнила условие. Я бы предложил вам фактически зарегистрировать «размер» и проверить его значение.

Если вы ищете the size of an array, использовать tempCarsArray.length как:

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

Чтобы проверить size вызывает проблему, попробуйте это.

Если вы знаете, фактическое количество маркеров вы ждете, чтобы повернуть, попробуйте заменить целое число на данный момент, как:

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

Если все маркеры сделали поворот, это означает, что переменный имеет размера только значение 1.

+0

Спасибо за ваше решение. Меня устраивает. Я исправил свою ошибку, из-за размера. Но все же только один маркер анимирован. Не могли бы вы предложить мне любые возможные способы ** анимировать группу маркеров одновременно **. @newguy –

+0

Не забудьте принять или перенести ответ, чтобы указать, что он сработал для вас. Теперь для последующего вопроса здесь есть [SO thread] (http://stackoverflow.com/questions/14864664/animating-markers-on-google-maps-v2), который может помочь. Видео демо и код включены. – noogui

 Смежные вопросы

  • Нет связанных вопросов^_^