Android Studio

Andorid - ViewPager2 사용해서 이미지 슬라이드

내손은개발 🐾 2024. 2. 28. 22:27
 

ViewPager2  |  Jetpack  |  Android Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 스와이프할 수 있는 형식으로 뷰 또는 프래그먼트를

developer.android.com

공식문서는 변동사항이다.

 

페이지를 넘길때 사용하는 것이 viewPager라고 한다.

2019년에 viewPager2가 나오면서 기존 viewPager보다는 viewPager2를 사용한다.

 

사용법은 저번에 recyclerView를 사용하려고 공부하다가 사용은 안했었는데 

recyclerView 사용하듯이 사용하면 된다.

 

사용하려는 목적은 팀 소개 프로젝트를 진행하면서 개인 페이지에 사진을 추가해서 슬라이드 형식으로 넘기기 위해 사용한다.

1) 먼저 ImageView부분을 ViewPager2로 바꿔주었다.

    <androidx.viewpager2.widget.ViewPager2
        android:id="@+id/viewPager"
        android:layout_width="190dp"
        android:layout_height="210dp"
        android:layout_marginStart="20dp"
        android:layout_marginTop="20dp"
        android:layout_marginEnd="20dp"
        android:src="@drawable/people"
        android:background="@color/white"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/personal_toolbar"/>

 

2) 그러고 나서 image_item으로 xml부분을 추가해주었다.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <ImageView
        android:id="@+id/imageListView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

 

 

3) 이제 MainActivity에서 어댑터를 생성해주고 들어갈 사진들을 만들어준다.

(index로 코드를 만든 상태여서  index를 사용해서 만들었다.)

    private fun getImageList1(): ArrayList<Int> {
        return arrayListOf<Int>(R.drawable.pic1, R.drawable.pic1, R.drawable.pic1)
    }

    private fun getImageList2(): ArrayList<Int> {
        return arrayListOf<Int>(R.drawable.pic2, R.drawable.pic2, R.drawable.pic2)
    }

    private fun getImageList3(): ArrayList<Int> {
        return arrayListOf<Int>(R.drawable.pic3, R.drawable.pic3, R.drawable.pic3)
    }

    private fun getImageList4(): ArrayList<Int> {
        return arrayListOf<Int>(R.drawable.pic4, R.drawable.pic4, R.drawable.pic4)
    }

음.. 뭔가 더 깔끔하게 사용할 수 있을 것같지만 넘어가고 혼자 공부할때 알아봐야겠다.

        binding.viewPager.orientation = ViewPager2.ORIENTATION_HORIZONTAL
        binding.personalToolbar.returnBtn.setOnClickListener {
            val intent = Intent(this, MainActivity::class.java)
            startActivity(intent)
        }

 

 

4) 어댑터가 필요하다!!

class ViewPagerAdapter(imageList: ArrayList<Int>) : RecyclerView.Adapter<ViewPagerAdapter.PagerViewHolder>() {
    var item = imageList

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = PagerViewHolder((parent))

    override fun getItemCount(): Int = item.size

    override fun onBindViewHolder(holder: PagerViewHolder, position: Int) {
        holder.imageList.setImageResource(item[position])
    }

    inner class PagerViewHolder(parent: ViewGroup) : RecyclerView.ViewHolder
        (LayoutInflater.from(parent.context).inflate(R.layout.image_item, parent, false)){

        val imageList = itemView.findViewById<ImageView>(R.id.imageListView)!!
    }
}

 

위에 말한것처럼 recyclerView 사용하듯이/라고 말한게 adapter생성하면서 느꼈다.

 

onCreateViewHolder, getItemCount, onBindViewHolder 추가하고 다른곳에서 사용 안하므로 inner class 생성

 

5) 간단하게 가야겠다고 생각해서 if문으로 index에 맞게 넣었다..(잘한건지 모르겠따,,)

        binding.viewPager.adapter = if (idx == 0) {
            ViewPagerAdapter(getImageList1())
        } else if (idx == 1) {
            ViewPagerAdapter(getImageList2())
        } else if (idx == 2) {
            ViewPagerAdapter(getImageList3())
        } else {
            ViewPagerAdapter(getImageList4())
        }