반응형
리사이클러뷰를 가로형태(HORIZONTAL)로 사용할 경우 좌우로 스와핑 시 속도 때문에 내가 원하는 Position으로 이동하기 힘들 경우가 있다.
이 경우 다음 코드를 이용해서 스크롤 속도를 조절해서 조정할 수 있다.
/** 가로형 RecyclerView 에서 리사이클러뷰 좌우로 스와프 시 속도를 조절해주는 Class
*
* 기본 RecyclerView 의 경우 좌우 스와프 시 빠른 속도로 인해 원하는 Position에 위치 시키가 매우 까다로움
*
* 해당 속도를 느리게 or 빠르게 조절 할 수 있는 LayoutManager Class
*
*/
class VariableScrollSpeedLinearLayoutManager(context: Context?, private val factor: Float) :
LinearLayoutManager(context) {
override fun smoothScrollToPosition(
recyclerView: RecyclerView,
state: RecyclerView.State,
position: Int
) {
val linearSmoothScroller: LinearSmoothScroller = object : LinearSmoothScroller(recyclerView.context) {
override fun computeScrollVectorForPosition(targetPosition: Int): PointF? {
return this@VariableScrollSpeedLinearLayoutManager.computeScrollVectorForPosition(targetPosition)
}
override fun calculateSpeedPerPixel(displayMetrics: DisplayMetrics): Float {
return super.calculateSpeedPerPixel(displayMetrics) * factor
}
}
linearSmoothScroller.targetPosition = position
startSmoothScroll(linearSmoothScroller)
}
}
다음과 같이 Kotlin 클래스를 만들어서 사용하면 된다.
여기서 VariableScrollSpeedLinearLayoutManager 이 클래스 이름이므로 자신이 사용하고자 하는 클래스 명을 사용하면 된다.
//레이아웃 매니저
var linearLayoutManager : VariableScrollSpeedLinearLayoutManager
//여기서 4F는 리사이클러뷰 이동속도를 이야기함. 자신의 원하는 속도를 위해선
// 4F, 2F , 8F 등으로 속도 조절이 가능하다.
linearLayoutManager = VariableScrollSpeedLinearLayoutManager(this, 4F)
linearLayoutManager.orientation = LinearLayoutManager.HORIZONTAL
자신의 리사이클러뷰.layoutManager = linearLayoutManager
아래와 같이 자신이 사용하고자 하는 곳에 위와 같이 사용하면 된다.
해당 부분에 자신의 리사이클러뷰 변수명을 넣어주면 된다 .
*해당 자료는 기존 검색을 통해 얻은 속도 조절 Java Code를 Kotlin 코드로 변경한 것입니다.
반응형
'Kotlin' 카테고리의 다른 글
[Android/Kotlin] 안드로이드/코틀린 findViewById() 없이 View 선언하기 (0) | 2021.04.22 |
---|---|
[Android/Kotlin] 안드로이드/코틀린 공공 데이터포털 XML Parsing (0) | 2021.04.09 |
[코틀린/Android] 안드로이드 코틀린 AppUpdateManager (0) | 2021.04.09 |
[안드로이드/코틀린] Bottom Sheet Dialog -하단 다이어로그 (0) | 2021.03.24 |
[코틀린] Kotlin Static(정적)변수 사용하기 (0) | 2021.02.02 |