Android/Tips
ViewPager2 오버랩 화면전환 (pageTransformer)
Seoplee
2021. 1. 5. 13:33
viewpager2로 화면 전환 할 때 일종의 오버랩 형식으로 구현할 필요가 있어서 찾아보았다.
기존의 viewpager2를 구현하는 방법은 전부 같고, pageTransformer만 커스텀하면 된다.
class OverlapPageTransformer : ViewPager2.PageTransformer {
override fun transformPage(view: View, position: Float) {
val pageWidth = view.width
when {
position < -1 -> { // view가 왼쪽 뒷 배경으로 넘어갔을 때
view.apply {
alpha = MIN_FADE
}
}
position < 0 -> { // view가 뒷 배경으로 넘어갈 때
view.apply {
alpha = 1 + position * (1 - MIN_FADE)
translationX = -pageWidth * MAX_SCALE * position
ViewCompat.setTranslationZ(this, position)
val scaleFactor =
(MIN_SCALE + (MAX_SCALE - MIN_SCALE) * (1 - Math.abs(position)))
scaleX = scaleFactor
scaleY = scaleFactor
}
}
position == 0f -> { // 최상단 view
view.apply {
alpha = 1f
translationX = 0f
ViewCompat.setTranslationZ(this, 0f)
scaleX = MAX_SCALE
scaleY = MAX_SCALE
}
}
position <= 1 -> {
view.apply {
alpha = 1 - position * (1 - MIN_FADE)
translationX = pageWidth * MAX_SCALE * -position
val scaleFactor = (MIN_SCALE
+ (MAX_SCALE - MIN_SCALE) * (1 - Math.abs(position)))
ViewCompat.setTranslationZ(this,-position)
scaleX = scaleFactor
scaleY = scaleFactor
}
}
else -> {
view.apply {
alpha = MIN_FADE
}
}
}
}
companion object {
private const val MIN_SCALE = 0.6f // 배경 뷰 크기
private const val MAX_SCALE = 0.8f // 최상단 뷰 크기
private const val MIN_FADE = 0.8f // 투명도
}
}