1

Я пытаюсь запустить цикл for с translateAnimation()imageview. Для каждой итерации imageview должен перемещаться i*20 раз спереди (по возможности, кривой). Но цикл полностью исполняет и не ждет для каждой анимации. Таким образом, анимация выполняется только один раз (последние ith раз), а не i раз. Пожалуйста, помогите мне!!!В андроиде FOR LOOP НЕ ждёт переводаАноним в нем для завершения

`

for(int i=m;i<=y;i++) { 
    int w=20*i 
    TranslateAnimation translate = new TranslateAnimation(0,w,0,0); 
    myAnimation1.setVisibility(View.VISIBLE); 
    translate.setDuration(1000); 
    translate.setFillAfter(false); 
    myAnimation1.startAnimation(translate); 
    myAnimation1.setVisibility(View.INVISIBLE); 
}' 
+0

Вам действительно нужно понимать, управляемые событиями, резьбовая операционные системы. Цикл for создаст анимацию и отправит события в основной поток (поток пользовательского интерфейса). Как только событие отправляется, цикл продолжается со следующей итерацией. Поскольку поток полностью занят, он не может обновлять пользовательский интерфейс до тех пор, пока цикл не будет завершен, и отобразится последняя анимация. Вместо этого используйте другой поток, возможно, используя «Runnable» с таймером. http://developer.android.com/reference/java/lang/Runnable.html – Simon

+3

Анимация не запускается синхронно. Они запланированы на основной теме. Я предлагаю вам посмотреть, как использовать 'ViewPropertyAnimator' (путем вызова' view.animate() ') вместо старых классов анимации. Вы можете добавить слушателей в конец анимации свойств, чтобы вы могли на самом деле связать анимацию; однако было бы лучше запустить только _one_ анимацию, которая имеет полную продолжительность и путь, который вы хотите. – Karakuri

+0

Спасибо за ответы, но цикл for все еще не ждет. – Aparna

ответ

0

Вы пытались добавить анимацию слушателя? http://developer.android.com/reference/android/animation/Animator.AnimatorListener.html

Что-то вроде

public void startNextAnimation(int count) { 
if (count != 0) 
    //setup next animation 
else 
    //done 
myAnimation1.setAnimationListener(new Animation.AnimationListener() { 
     @Override 
     public void onAnimationStart(Animation animation) { 

     } 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      startNextAnimation(countdown); 
     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { 

     } 
    });