Я хочу, чтобы каждая анимация, начиная с кода ниже, начиналась с задержки, как последовательность. Итак, у меня есть этот код:
public void setAnimation(){ View view; String animation = prefs.getString("animations", "Scale"); String interpolator = prefs.getString("interpolators", "Bounce"); Animation animate = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.scale_in); for(int i=0; i<gridView.getChildCount(); i++){ view = gridView.getChildAt(i); view.startAnimation(animate); } }
Потому что существует цикл for, все дочерние анимации будут запускаться мгновенно. Я уже пробовал:
Thread.sleep.... Handler... animate.setStartTime... animate.setStartOffset...
Но все дочерние анимации начинаются мгновенно.
Я пробовал этот метод внутри цикла, и анимация не запускается:
animate.setAnimationListener(new AnimationListener(){ public void onAnimationEnd(Animation arg0) { view.startAnimation(animate); } public void onAnimationRepeat(Animation arg0) { } public void onAnimationStart(Animation arg0) { } });
Thanx заранее.
Решением является создание GridLayoutAnimationController или LayoutAnimationController.
Я использовал LayoutAnimationController для отображения элементов в LinearLayout с эффектом анимации один за другим, используя следующий код.
Animation fadeIn = AnimationUtils.loadAnimation(context, R.anim.anim_fade_in); //lnrContactContainer is LinearLayout. AnimationSet set = new AnimationSet(true); set.addAnimation(fadeIn); set.setDuration(500); controller = new LayoutAnimationController(set, 1f); lnrContactContainer.setLayoutAnimation(controller); lnrContactContainer.setVisibility(View.VISIBLE);
Но такой же подход не работает, когда я использую его для отображения анимации fadeout, скрывая LinearLayout lnrContactContainer.setVisibility(View.GONE)
;