본문 바로가기

Kotlin

[코틀린] Kotlin RecyclerView Scroll 속도 조절

반응형

리사이클러뷰를 가로형태(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 코드로 변경한 것입니다.

 

 

 

 

 

 

반응형