2016-02-10 4 views
2

LayoutAnimationController используется для анимации детей представления группыLayoutAnimationController не работает скрытия View Group, но работает, когда Отображение вида группы

я использовал 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); 

Но такой же подход не работает, когда я использую его, чтобы показать анимацию затухания, скрывая LinearLayoutlnrContactContainer.setVisibility(View.GONE);

Вместо того, чтобы прятать детей поодиночке, он скрывает родителя.

ответ

2

Вместо того, чтобы прятать детей один за другим, он скрывает родителя.

Чтобы скрыть родителя только после того, как Animation был применен ко всем детям, используйте AnimationListener:

lnrContactContainer.setLayoutAnimationListener(new Animation.AnimationListener() 
     { 
      @Override 
      public void onAnimationStart(Animation animation){} 

      @Override 
      public void onAnimationEnd(Animation animation) 
      { 
       lnrContactContainer.setVisibility(View.GONE) 
      } 

      @Override 
      public void onAnimationRepeat(Animation animation){} 
     }); 

Кстати, моя Fadeout анимация нужна

set.setFillAfter(true); 

держать элементы из popping снова после исчезновения, хотя мой анимационный xml-файл (в res/anim) уже содержит android:fillAfter="true".

+0

'set.setFillAfter (true); «Спасибо, что направил меня на это, у меня была проблема с детьми, которые снова появились. – DeltaCap

+0

Только один вопрос: Почему я должен запускать анимацию вручную, используя 'lnrContactContainer.startLayoutAnimation();' в случае сокрытия 'ViewGroup', но не в случае его отображения? – DeltaCap

+1

@Null n Void - в моем тестовом приложении я запускал оба типа анимации, нажимая кнопки. Оба раза: «lnrContactContainer.setLayoutAnimation (контроллер)»; был вызван, и анимация началась сразу же. ОК, разница в том, что я тестировал ListView, а не LinearLayout. Поэтому я не знаю, почему, но есть и другие различия между AdapterViews и «реальными» макетами. – 0X0nosugar