ViewPager – 기본

1. 정의

ViewPager는 Android에서 제공하는 위젯 중 하나로, 좌우로 슬라이딩하면서 화면에 여러 뷰를 표시하는 기능을 제공합니다.

탭 메뉴나 이미지 슬라이더 등 다양한 용도로 사용되며, 여러 보기를 규칙적으로 배열하여 스크롤 가능한 화면으로 구성할 수 있습니다.

언뜻보기에는 recyclerView와 비슷해 보이지만 viewpager를 사용하는 기능이 있어 화면의 특정 부분을 지나면 화면이 전환됩니다.

2. 사용방법

2-1.xml 부분

<androidx.viewpager.widget.ViewPager
    android:id="@+id/viewPager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

2-2.메인으로 들어가야 하는 부분

// ViewPager 객체 생성
val viewPager = findViewById<ViewPager>(R.id.viewPager)

// PagerAdapter 객체 생성
val pagerAdapter = MyPagerAdapter(supportFragmentManager)

// ViewPager에 어댑터 설정
viewPager.adapter = pagerAdapter

// 현재 위치 지정
viewPager.currentItem = 0

2-3.어댑터 구현

class MyPagerAdapter(fragmentManager: FragmentManager) : FragmentPagerAdapter(fragmentManager) {

    companion object {
        private const val PAGE_COUNT = 3
    }

    override fun getCount(): Int {
        return PAGE_COUNT
    }

    override fun getItem(position: Int): Fragment {
        return MyFragment.newInstance(position)
    }

    override fun isViewFromObject(view: View, obj: Any): Boolean {
        return view == (obj as Fragment).view
    }

    override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
        container.removeView(obj as View)
    }
}

getCount 메소드는 ViewPager에 표시할 뷰의 수를 반환하고 getItem 메소드는 지정된 위치에 해당하는 뷰를 생성합니다.

isViewFromObject 메서드는 뷰가 객체에 연결되어 있는지 확인하고 destroyItem 메서드는 뷰를 제거합니다.

2-4 프래그먼트 구현

class MyFragment : Fragment() {

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val rootView = inflater.inflate(R.layout.fragment_my, container, false)
        return rootView
    }

    companion object {
        fun newInstance(position: Int): MyFragment {
            val fragment = MyFragment()
            val args = Bundle()
            args.putInt("position", position)
            fragment.arguments = args
            return fragment
        }
    }
}

onCreateView 메서드는 Fragment가 화면에 표시될 때 호출되어 뷰를 생성하고 반환합니다.

MyFragment는 Fragment에서 상속하고 newInstance 메서드를 사용하여 Fragment 인스턴스를 만듭니다.

프래그먼트는 위치 매개변수를 수신하고 매개변수를 Bundle 객체에 저장하고 이를 Fragment로 전송하여 생성됩니다.

이 과정을 통해 ViewPager에서 각 Fragment의 위치를 ​​구분할 수 있습니다.

참고로 Bundle은 Android에서 데이터를 전달하는 데 사용되는 객체를 말합니다.

데이터는 키-값 쌍의 형태로 저장 및 전송이 가능하며 주로 Intent 또는 Fragment와 같은 Android 구성 요소에서 전송하는 데이터를 저장하는 데 사용됩니다.

3. 기타 참고 사이트

ViewPager2를 사용하여 프래그먼트 간 스와이프 | Android 개발자 | Android 개발자

ViewPager2 Store를 사용하여 교차 조각 슬라이드쇼 컬렉션으로 구성하고 원하는 대로 콘텐츠를 분류합니다.

화면 슬라이드쇼는 하나의 전체 화면에서 다른 전체 화면으로의 전환입니다.

developer.android.com

(안드로이드) RecyclerView android:clipToPadding=”false”

리사이클러 뷰에 패딩을 주면 위와 아래에 패딩 공간이 생깁니다.

다만, 사람마다 다르지만 스크롤링 시 패딩 공간을 활용하면 더 많은 뷰를 사용할 수 있고 자연스러운(?) 뷰를 보여줄 수 있습니다.

막내 programming.

Android View의 clipChildren에 대해 – Hansol’s Blog

기본적으로 Android의 모든 뷰는 실제로 차지하는 영역만 그릴 수 있습니다.

즉 전체 화면을 차지하는 View의 면적(left=100, top=100, right=200, bottom=200)은 (left=200, top=2)이다.

giantsol.github.io