오늘은
에서 bottomnavigation view를 스크롤 감지를 통해 숨겨보도록 하겠습니다.
저는 현재 activity에 bottomnavigationview가 있고 fragment에 recyclerview가 있는 상태입니다.
private fun navController(
mRecyclerView: RecyclerView,
bottomNav : BottomNavigationView
) {
mRecyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
if (dy > 0 || dy < 0) {
bottomNav.visibility = View.GONE
}
}
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
bottomNav.visibility = View.VISIBLE
}
super.onScrollStateChanged(recyclerView, newState)
}
})
}
onScrolled는
RecyclerView가 스크롤되었을 때 호출되는 콜백 메서드입니다.
-> 이 때 dx,dy로 스크롤 중인지 판별할 때 중요한 점은 스크롤 위치를 뜻하는 것이 아니라 양을 뜻합니다. dy가 음수 값이라면(원래의 세로축 양이 줄어들었다면) 기준에서 위로 스크롤했다는 뜻이고, dy가 양수 값이라면(원래의 세로축 양이 늘었다면) 기준에서 아래로 스크롤 했다는 뜻입니다.
onScrollStateChanged는
RecyclerView의 스크롤 상태가 변경될 때 호출되는 콜백 메서드입니다.
-> SCROLL_STATE_SETTLING는 스크롤이 어디든 끝까지 간 상태를 뜻합니다.
-> SCROLL_STATE_IDLE는 현재 스크롤을 하지 않은 상태를 뜻합니다.
-> SCROLL_STATE_DRAGGING는 현재 사용자 터치 입력과 같은 외부 입력에 의해 드래그되고 있는 상태를 뜻합니다.
를 보면 현재 스크롤 중일 때 bottomnavigationview가 사라진 것을 확인할 수 있습니다.