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?
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