-
navigation component에서 shared transition 사용하기카테고리 없음 2021. 8. 5. 22:39
목표했던 건 RecyclerView Item -> 다음 Fragment 화면 -> 뒤로 가기 -> RecyclerView Item으로 다시 오기
이거였다...
진짜 삽질 개 많이 해따 ㅠㅠㅠ
삽질 중 발견한 것은.. 다음과 같다.
- RecyclerView의 Adapter Itemview 포지션이 명확해야 해당 viewHolder를 가져와 다시 돌아올 때 애니메이션을 줄 수 있음
- transtionName이 양쪽이 동일해야만 애니메이션이 발생함(서로 서로를 맵핑해서 실행하는 듯함)
- Animation을 주려는 View들이 모두 그려진 후에 애니메이션을 호출해야 함. (실행되기는 하나 View가 깨지면서 애니메이션이 호출될 수 있음)
- 넘어가는(다음) 화면에 transitionName이 null일 수 있으니 체크해야 함
제일 먼저 RecyclerView 아이템에 TransitionName을 설정한다. 이때 각각의 아이템마다 TransitionName을 다르게 줘야 각각의 아이템에 맵핑을 처리한다고 생각하면 된다. (여기에서 진짜 삽질 많이 함..ㅠㅠㅠ 각각 tag라고 생각하면 편할 듯)
그다음 RecyclerView에 Animation 처리하기 전에 View가 그려진 다음 실행해 달라는 함수를 추가해준다.
어차피 submitList 하게 되면 View가 refresh 되니 그다음 줄에 추가했음 의미 없다 헝헌항하나
그다음 화면으로 보내고 싶은 Data 및 extras를 추가해준다.
선택된 Position에 따라서 ItemView를 가져오고 해당 TransitionName 값을 가져온 뒤 navigate 할 때 같이 담아서 보낸다.
그다음 화면에서 onCreate() 부분에 다음 코드를 추가
그리고 동일하게 TransitionName을 맞춰준다.
그리고 viewBinding 데이터에 전 화면에서 Direction으로 받은 데이터를 넣어주어 전 화면 TransitionName과 다음 화면의 TransitionName을 맞춰준다. <-- (이거 진짜 꼭 해야 함 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ)
그리고 실행을 뾰로롱 하면 상단에 gif와 동일하게 작동... 끝!