1. 스와이프 및 애니메이션 제거
우선 뷰페이저에 isUserInputEnabled 속성을 false로 설정하면 사용자의 스와이프 이벤트를 막을 수 있습니다.
binding.refrigeratorViewpager.run{
isUserInputEnabled= false
}
그리고 만일 뷰페이저와 탭 레이아웃을 같이 사용한다면, 탭 레이아웃에 아래와 같이 설정하면 애니메이션 또한 제거할 수 있습니다.
binding.refrigeratorTabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab?) {
tab?.position?.let{binding.refrigeratorViewpager.setCurrentItem(it, false)}
}
override fun onTabUnselected(tab: TabLayout.Tab?) {
}
override fun onTabReselected(tab: TabLayout.Tab?) {
}
})
setCurrentItem 에서 두 번째 파라미터로 false를 설정하면 애니메이션을 제거합니다.
2. 뷰페이저 스와이프 속도 설정
이 경우 스와이프되는 속도를 조절하면 됩니다.
이때 ViewPager2는 상속이 안 되기 때문에, 코틀린의 확장함수를 사용합니다.
이때 duration 에 해당하는 값이 바로 속도이며, 단위는 밀리세컨드입니다.
fun ViewPager2.setCurrentItemWithSpeed(
item: Int,
duration: Long,
interpolator: TimeInterpolator = AccelerateDecelerateInterpolator(),
pagePxWidth: Int =width,
pagePxHeight : Int =height
) {
val pxToDrag : Int = if (orientation== ViewPager2.ORIENTATION_HORIZONTAL) {
pagePxWidth * (item - currentItem)
} else {
pagePxHeight * (item - currentItem)
}
val animator = ValueAnimator.ofInt(0, pxToDrag)
var previousValue = 0
animator.addUpdateListener{valueAnimator->
val currentValue = valueAnimator.animatedValueas Int
val currentPxToDrag = (currentValue - previousValue).toFloat()
fakeDragBy(-currentPxToDrag)
previousValue = currentValue
}
animator.addListener(object : Animator.AnimatorListener {
override fun onAnimationStart(p0: Animator?) {
beginFakeDrag()
}
override fun onAnimationEnd(p0: Animator?) {
endFakeDrag()
}
override fun onAnimationCancel(p0: Animator?) {
}
override fun onAnimationRepeat(p0: Animator?) {
}
})
animator.interpolator= interpolator
animator.duration= duration
animator.start()
}
이후 아래와 같이 사용하면 됩니다
binding.onBoard3Viewpager.setCurrentItemWithSpeed(++viewpagerIndex, 550)
728x90
반응형
'Android > 정보' 카테고리의 다른 글
텍스트뷰(TextView) 관련 짜투리 지식 2 (더보기 설정) (0) | 2021.12.11 |
---|---|
텍스트뷰(TextView) 관련 짜투리 지식 1 (특정 문자열 색상 설정, 밑줄 긋기, 특정 문자열 폰트 설정) (0) | 2021.12.10 |
Google Play Console 에서 앱 서명 키 관리할 경우 릴리즈 해시 키 얻는 방법 (0) | 2021.11.19 |