
android:orientation="vertical"
android:layoutDirection="rtl"
각각 다른 배경색을 가진 Fragment를 슬라이드 해보기
dependencies {
implementation 'androidx.viewpager2:viewpager2:1.0.0'
}
<androidx.viewpager2.widget.ViewPager2
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
/>
<me.relex.circleindicator.CircleIndicator3
android:id="@+id/vp_indicator"
android:layout_width="match_parent"
android:layout_height="48dp"
app:ci_drawable="@drawable/gr_radius"
app:ci_drawable_unselected="@drawable/black_radius" />
Indicator : https://github.com/ongakuer/CircleIndicator
radius.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@color/green"/>
</shape>
ViewPager2와 함께 사용하여 각 페이지를 나타내며, 페이지의 배경을 동적으로 설정.
페이지의 위치에 따라 다른 배경색을 표시하며, ViewPager2에서 페이지가 슬라이드될 때 각 페이지의 배경색을 표시
빨강 - 파랑 - 노랑 - 초록 - 하늘
class ViewPagerScreenFragment(val position: Int) : Fragment() {
lateinit var fragmentViewPagerScreenFragment: FragmentViewPagerScreenBinding
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
fragmentViewPagerScreenFragment = FragmentViewPagerScreenBinding.inflate(inflater)
when(position) {
0 -> fragmentViewPagerScreenFragment.root.setBackgroundResource(R.color.red)
1 -> fragmentViewPagerScreenFragment.root.setBackgroundResource(R.color.blue)
2 -> fragmentViewPagerScreenFragment.root.setBackgroundResource(R.color.yellow)
3 -> fragmentViewPagerScreenFragment.root.setBackgroundResource(R.color.green)
4 -> fragmentViewPagerScreenFragment.root.setBackgroundResource(R.color.sky)
else -> fragmentViewPagerScreenFragment.root.setBackgroundResource(R.color.black)
}
return fragmentViewPagerScreenFragment.root
}
}
class ViewPagerAdapter(fragmentManger: FragmentActivity, private val count: Int): FragmentStateAdapter(fragmentManger) {
override fun getItemCount(): Int {
return count
}
override fun createFragment(position: Int): Fragment {
return ViewPagerScreenFragment(position)
}
}
class ViewPagerFragment : Fragment() {
lateinit var fragmentViewPagerFragment: FragmentViewPagerBinding
lateinit var mainActivity: MainActivity
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
fragmentViewPagerFragment = FragmentViewPagerBinding.inflate(inflater)
mainActivity = activity as MainActivity
fragmentViewPagerFragment.run {
viewPager.run {
adapter = ViewPagerAdapter(mainActivity, 5) // 5: page 수
orientation = ViewPager2.ORIENTATION_HORIZONTAL // 스크롤방향 가로
adapter!!.registerAdapterDataObserver(vpIndicator.adapterDataObserver)
// ViewPager2 어댑터와 ViewPager2와 연결된 Indicator를 동기화
}
vpIndicator.setViewPager(viewPager) // ViewPager2와 연결된 Indicator 설정
}
return fragmentViewPagerFragment.root
}
}
가로 스크롤

세로 스크롤

참고자료
https://developer.android.com/training/animation/vp2-migration?hl=ko
https://medium.com/google-developer-experts/exploring-the-view-pager-2-86dbce06ff71
https://blog.gangnamunni.com/post/viewpager2/