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 // 투명도
}
}
'Android > Tips' 카테고리의 다른 글
Recyclerview adapter 재활용하기 (0) | 2021.11.15 |
---|---|
TabLayout (0) | 2021.11.15 |
Retrofit2 Multiple BaseUrl (Java) (0) | 2021.03.25 |
FCM 푸쉬 알림 보내기 (페이로드에 따른 data 전송문제) (0) | 2020.12.06 |
Retrofit2 MultiPart로 이미지 파일 전송하기 (Kotlin) (0) | 2020.12.02 |