본문 바로가기

ViewPager

(3)
[안드로이드] Elevation 효과가 적용된 CardView ViewPager 구현하기 이번에 매터리얼 카드뷰 형태의 ViewPager를 구현해야 하는 요구사항이 생기면서, 일전에 한번 스쳐본 적이 있던 레퍼지토리에 다시 방문했다. rubensousa/ViewPagerCards ViewPager cards inspired by Duolingo. Contribute to rubensousa/ViewPagerCards development by creating an account on GitHub. github.com 해당 레퍼지토리에서는 일반적인 CardView 형태의 ViewPager 구현은 물론 Elevation 효과까지 적용 가능한 코드들을 제공하고 있다. JAVA 기반 소스이기에 이를 프로젝트에 적용하면서 코틀린 및 binding된 요소들과 섞는 작업을 했다. 작업을 진행하면서 필요한..
[안드로이드] ViewPager의 페이지 별 요소를 참조할 때의 유의점 ViewPager에 개별 페이지를 구현하고자 할 때에는 기존 방식에서 이슈가 없었는데, 개별 페이지 내에서 조작해야 하는 요소가 들어가고 나니 문제가 생겼다. 페이지를 이동하면서 페이지들의 생명주기가 변하는 것, 그리고 참조값이 달라지기 때문인지 넣어준 버튼들과 터치 이벤트가 제대로 동작하지 않았다. 이를 해결해주기 위해서는 Adapter 내에서 instantiateItem을 override 해주어야 했다. override한 instantiateItem 내부에 참조하는 요소들을 지역변수로 할당해주니 페이지 별로 참조하고자 했던 요소들이 정상적으로 동작하는 걸 확인할 수 있었다. override fun instantiateItem(container: ViewGroup, position: Int): Any ..
[안드로이드] ViewPager를 사용하는 swipe view에서 페이지 다시 생성을 방지하기 기존에 두 개의 페이지에 ViewPager가 포함된 swipe 뷰를 구현해 두었었는데, 한 개의 페이지를 다시 추가하게 되면서 세 개의 페이지를 swipe로 움직여 볼 수 있도록 하였다. 헌데 문제는 한번 마지막 페이지까지 움직이고 난 뒤 첫 페이지로 돌아가면 세번째로 보여주던 페이지를 다시 보여주는 현상이 있었다. 로그를 찍어보니 기존 코드에서는 페이지를 swipe 할때마다 새로 뷰를 만들어 보여주는 것을 볼 수 있었는데, 이때문에 페이지 이동마다 페이지 인덱스를 참조해야되나 하는등의 시행착오를 겪었는데 잘 되지 않았고 시간이 있고나서 찾은 방법은 ViewPager에 setOffscreenLimit을 거는 것이다. ViewPager.setOffscreenPageLimit() ViewPager는 Swip..