마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Gone 에서 Visible 애니메이션할때 처음 동작하지 않는 문제

0 추천

안녕하세요.

애니메이션을 줄려고하는데 잘되지 않아 도움을 구합니다.

View가 Gone 상태에서 Visible로 변경되면서 슬라이드 되는 애니메이션을 구현하였습니다.

맨처음 애니메이션이 동작하지 않습니다. 그리고 이후에는 잘동작합니다.

그리고 View 상태를 Visible 상태에서 애니메이션을 하면 아주 잘됩니다.

찾아보니 Gone 상태일때 레이아웃이 랜더링 되지 않아서 첫 애니메이션이 동작하지 않는다고 합니다.

대안으로 부모 레이아웃에 android:animateLayoutChanges="true" 옵션을 주면 처음에도 애니메이션 효과가 나타나기는 합니다만 원하는 애니메이션 효과가 되지 않았습니다.

이 문제를 해결할 방법이 있을까요? 답변 기다립니다.

익명사용자 님이 2019년 8월 7일 질문
꼭 Gone 에서 시작해야 할 이유가 있나요?
Gone 상태가 문제라면, Gone 대신  inVisible 로 설정하시면 되는거 아닌가요?
네 invisible이나 visible의 경우 공간을 잡아먹기 때문에 보이지 않는 상태로 시작이 되어야 합니다.

1개의 답변

0 추천
 
채택된 답변
view.setVisibility(View.VISIBLE);
animation = new TranslateAnimation(0,0,from,to);
animation.setDuration(500);
animation.setFillAfter(true);
view.setAnimation(animation);
view.startAnimation(animation);
융슈비 (1,280 포인트) 님이 2019년 8월 7일 답변
VISIBLE 하기 전에 애니메이션을 등록할 수 없는 상태입니다. 잘 알고 계시듯이 렌더링 되지 않은 상태이기 때문입니다. VISIBLE 과 동시에 애니메이션을 등록하면 됩니다.
네 그렇게 시도 해봤었지만 첫번째에 여전히 동작하지 않습니다. 혹시 구조 때문에 안될수도 있습니까? 구조가 좀 복잡합니다.
activity > viewpager > fragment > viewpager > fragment 안에서 동작해야하는 구조입니다.
Animation 클래스는 동작한다는 건 테스트 해보신것 같으니, Fragment 말고 Activity 내에서 테스트를 진행해보세요.

activity(테스트1) -> viewpager -> fragment(테스트2) -> viewpager -> fragment(테스트3)

만약 activity 에서 정상적으로 동작한다면 코드가 잘못되었거나 fragment 내에서의 이슈가 있을 수도 있습니다.

테스트 후 결과 올려주시면 같이 고민해 보면 될 것 같습니다.

https://stackoverflow.com/questions/13503557/android-animation-within-a-fragment-not-working

비슷한 글이 있습니다.
LayoutTransition mLayoutTransition = new LayoutTransition();
mLayoutTransition.disableTransitionType(LayoutTransition.DISAPPEARING);
view.setLayoutTransition(mLayoutTransition);

위와 같이 코드로 android:animateLayoutChanges="true" 옵션을 줄수 있습니다.

최초 실행이라면 위 코드를 적용하고 이후부터는
view.setLayoutTransition(null);
적용하여 기존 애니메이션 효과를 주도록 하였습니다.

더 좋은 방법을 찾으면 공유 부탁드립니다. 고민에 함께해 주셔서 감사합니다.
...