본문 바로가기

카테고리 없음

[Android-] ScrollView

ScrollView

ScrollView는 배치되어 있는 View가 화면을 벗어 날 경우 스크롤을 할 수 있도록 제공되는 View 이다.
ScrollView는 위 아래로 스크롤이 가능하며 HorizontalScrollView는 좌 우로 스크롤이 가능하다.
ScrollView와 HorizontalScrollView를 조합하면 상하 좌우 스크롤이 가능하다.
[ ScrollView, HorizontalScrollView ]

1. 주요 리스너 - OnScrollChangeListener : 스크롤 상태가 변경될 때

2. 주요 프로퍼티 - scrollX : 현재의 x 좌표 - scrollY : 현재의 y 좌표

3. 주요 메서드
- scrollTo : 지정된 위치로 이동시킨다
- scrollBy : 지정한 만큼 이동시킨다.
- smoothScrollTo : 지정된 위치로 이동시킨다(애니메이션)
- smoothScrollBy : 지정한 만큼 이동시킨다(애니메이션)
▼ 다음과 같은 예제를 통해 실습해보자

package kr.co.lion.android14_scrollview

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kr.co.lion.android14_scrollview.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    lateinit var activityMainBinding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(activityMainBinding.root)

        activityMainBinding.apply {
            // ScrollView의 Scroll 이벤트
            // 두 번째 : 스크롤 된 X 좌표
            // 세 번째 : 스크롤 된 Y 좌표
            // 네 번째 : 스크롤 되기 전 X 좌표
            // 다섯 번째 : 스크롤 되기전 Y 좌표
            scroll1.setOnScrollChangeListener { v, scrollX, scrollY, oldScrollX, oldScrollY ->
                textView2.text = "Y : $oldScrollY -> $scrollY"
            }
            // HorizontalScrollView의 Scroll 이벤트
            scroll2.setOnScrollChangeListener { v, scrollX, scrollY, oldScrollX, oldScrollY ->
                textView.text = "X : $oldScrollX -> $scrollX"
            }

            button.setOnClickListener {
                // 현재의 좌표를 가져온다
                textView.text = "현재의 x좌표 : ${scroll2.scrollX}"
                textView2.text = "현재의 Y 좌표 : ${scroll1.scrollY}"
            }

            button2.setOnClickListener {
                // 지정된 위치로 이동한다
                // scroll1.scrollTo(0,300)
                // scroll2.scrollTo(300,0)
                // 지정한 만큼 이동한다.
                // scroll1.scrollBy(0, 100)
                // scroll2.scrollBy(100, 0)
                // 지정된 위치로 이동한다. (애니메이션)
                // scroll1.smoothScrollTo(0,300)
                // scroll2.smoothScrollTo(300,0)
                // 지정한 만큼 이동한다. (애니메이션)
                scroll1.smoothScrollBy(0, 100)
                scroll2.smoothScrollBy(100, 0)
            }
        }
    }
}​