본문 바로가기

안드로이드/코틀린

[Android] 특정 위치로 스크롤 하기

반응형

ScrollView하위 뷰중 특정 뷰로 스크롤 되도록 하는 기능을 구현했습니다.

먼저 제가 작업한 뷰의 구조는 아래 사진과 같습니다. 

타이틀과 백버튼이 있는 Top 영역과 그 아래 컨텐츠를 담고 있는 ScrollView 로 이루어진 간단한 엑티비티 입니다.

 

방식은 간단하게 특정 뷰가 화면내 어떤 위치에 위치하고 있는지 좌표를 구하고 그 좌표 만큼 스크롤 합니다.

view.getLocationOnScreen(outLocation: IntArray)

특정뷰 상단이 스크롤뷰 상단에 걸리도록 

    private fun scrollToView(view: View){

        var statusBarHeight = CommonViewUtil.getStatusBarHeight(context = this)

        val viewLocation = IntArray(2)
        val scrollLocation = IntArray(2)

        view.getLocationOnScreen(viewLocation)
        binding.nsContent.getLocationOnScreen(scrollLocation)

        val scrollY = (binding.nsContent.scrollY + viewLocation[1]) - scrollLocation[1]

        binding.nsContent.smoothScrollBy(0, scrollY)
    }

'smoothScrollBy' 메소드를 'smoothScrollTo'로 헷갈리지 않도록 주의해주세요

  • smoothScrollBy(x,y) : 현재 위치에서 상대적인 위치로 x,y만큼 이동 
  • smoothScrollTo(x,y) : x,y의 위치로 스크롤 

 

이상 포스팅 마칩니다! 

궁금하신 사항은 댓글 남겨주세요! 최대한 빨리 확인하고 답변 달겠습니다.

 

반응형