2011-06-30 16 views
20

Mam LinearLayout, który chcę móc pokazać/ukryć, klikając link "więcej szczegółów". Robię to poprzez wywołanieAnimacje i setVisibility

moreDetailsSection.setVisibility(View.VISIBLE); 

lub

moreDetailsSection.setVisibility(View.GONE); 

aby pokazać/ukryć. Działa to dobrze, ale chciałem dodać animację, która sprawia, że ​​pola układu ładnie się przesuwają, ale to jest uruchamiane tylko wtedy, gdy pole staje się widoczne, jeśli je ukryję i pokażę ponownie, pole nagle pojawia się nagle . Oto kod animacji (moreDetailsSection jest rozmieszczenie w pytaniu):

 AnimationSet set = new AnimationSet(true); 

     Animation animation = new AlphaAnimation(0.0f, 1.0f); 
     animation.setDuration(250); 
     set.addAnimation(animation); 

     animation = new TranslateAnimation(
      Animation.RELATIVE_TO_SELF, 1.0f, Animation.RELATIVE_TO_SELF, 0.0f, 
      Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f 
    ); 
     animation.setDuration(150); 
     set.addAnimation(animation); 

     LayoutAnimationController controller = 
      new LayoutAnimationController(set, 0.25f); 
     moreDetailsSection.setLayoutAnimation(controller); 

Wszelkie porady jak zrobić to uruchomić za każdym razem pokażę układ i nie tylko za pierwszym razem?

Odpowiedz

14

Zakładam, że więcejSetailsSection jest NIEWIDZIALNA na początku. wystarczy, że utworzysz obiekt Animation i wywołasz poniższy kod po kliknięciu linku więcej szczegółów.

moreDetailsSection.startAnimation(animation); 
moreDetailsSection.setVisibility(View.VISIBLE); 
+0

Okazuje się, że widok nie będzie mierzony podczas jego widoczność jest 'GONE', więc trzeba by ustawić widoczność "VISIBLE" najpierw, gdy używasz animacji, która musi znać granice widoku. – milosmns

2

Możesz użyć tej linii w widoku dla tego układu:

android:animateLayoutChanges="true" 
+0

W przypadku automatycznych i prostych animacji jest to właściwy sposób. – milosmns

Powiązane problemy