ViewPager2 PageTransformer
ViewPager2
ViewPage2는 기존 ViewPager과 달리 수직방향, DiffUtil, PageTransformer 기능을 지원한다.
DiffUtil 은 RecyclerView나 viewPager2 에서 사용되는 아이탬 리스트가 변경될 때 아이탬 리스트 전부를 다시 로드하는게 아니라 변경된 점만 적용시키는 유틸 라이브러리이다.
그리고 PageTransformer 는 페이지의 변경을 감지하고 실행하는 동작을 설정할 수 있으며 페이지 변경 모양을 커스텀할 수 있게 해준다.
이번 코드랩에서는 간단하게 페이지가 넘겨지면 점점 희미해져가면서 사라지도록 만들어보자. (초기 시작 페이지 설정도 포함)
// 2022-03-22
// 이미 구현된 뷰 페이지에 PageTransformer 효과 추가하기
// 페이지에 변경이 감지되면 실행
viewPager.setPageTransformer{ page, position ->
when{
// 현재 위치를 0으로 삼고 오른쪽은 1,2,3... 왼쪽은 -1,-2,-3... 의 포지션을 갖는다
// 포지션의 절대값이 1을 넘기면(현재 위치기 아니면) 감추기
position.absoluteValue >= 1F -> page.alpha = 0F
// 현재 페이지는 선명하게
position.absoluteValue =- 0F -> page.alpha = 1F
//움직이는 동안에는 점차 흐려지게
else ->{
page.alpha = 1F - 2*position.absoluteValue
}
}
}
초기 시작 페이지 설정법
ViewPager2 객체에 currentItem 을 변경함으로 현재 페이지를 바꿀수 있다.
viewPager.currentItem = 3
좌우로 무한 스크롤 지원을 위해서는 아이탬의 갯수를 Int.MAX_VALUE 로 설정하고 시작 위치를 그 중간값으로 해야한다.
하지만 위와 같은 방식으로는 초기 시작 페이지를 설정이 불가하다.
위 예제처럼 코드를 작성하면 자동으로 ViewPager 객체에서
setCurrentItem(position :Int, smoothScroll :Boolean)
함수가 실행되고 smoothScroll 기본 값이 true기 때문에 뷰페이져가 직접 움직여서 초기값으로 이동된다.
따라서 우리는 currentItem 값을 바로 변경해주는게 아닌 setCurrentItem()
함수를 직접 호출해야 한다.
viewPager.setCurrentItem(3, false)