오늘은 ScrollToPosition에 대해 배워 보았습니다.
ScrollToPosition은 유튜브의 홈버튼 클릭 시 최상단으로 이동하게 되는 것으로 간단한 예시를 들 수 있을 것 같습니다.
화면의 최상단(최하단)으로 이동하는 방법은 간단하게
myRecyclerview.smoothScrollToPosition(position : Int) //또는 그냥 ScrollToPosition
이 있지만 이 방식은 작동하지 않더군요..
그래서 아래의 사이트의 방식을 사용하여 코드를 작성해보았습니다.
/저는 현재 역순 리사이클러뷰방식을 사용 중이라 item의 끝으로 올리는 점을 알립니다./
val smoothScroller = object : LinearSmoothScroller(this) {
override fun getVerticalSnapPreference(): Int {
return LinearSmoothScroller.SNAP_TO_END
}
}
//마지막으로 보이는 뷰의 어댑터 위치를 반환합니다.
val last = manager!!.findLastVisibleItemPosition()
smoothScroller.targetPosition = last
manager!!.startSmoothScroll(smoothScroller)
val last의 사용된 방식으로 마지막으로 보이는 뷰의 어댑터 위치(position)을 받아
scroll의 targetposition을 마지막으로 설정하여 작동 시켜 잘 되는 것을 확인 할 수 있었습니다. 이 방식은 smooth하게 올리는 방법으로 순간이동하여 최상단(최하단)으로 이동하는 것이 아닌 약간의 animation?을 통해 이동하는 방식입니다.
순간이동 즉, 누르자 마자 이동되는 방식을 사용하고 싶으시면
private fun scrollToLastItem(view: View) {
var manager = findViewById<RecyclerView>(R.id.recyclerView).layoutManager as? LinearLayoutManager
val last = manager!!.findLastVisibleItemPosition()
Handler(Looper.getMainLooper()).postDelayed(
Runnable { manager!!.scrollToPositionWithOffset(last,0)},
300
)
}
위 방식을 사용하시면 바로 해당 위치로 이동되는 것을 확인 할 수 있었습니다.
도움이 된 사이트
LinearSmoothScroller - developer.android.com
Stackoverflow