[안드로이드 프로그래밍] Material3 - Carousel

PUJIN·2023년 7월 28일
0

android programming

목록 보기
25/26
post-thumbnail

show a collection of items that can be scrolled on and off the screen



1. activity 화면 구성


  • Carousel을 보여줄 recyclerView 배치



2. recyclerView 화면 구성


  • carousel.MaskableFrameLayout 배치
    • imageView 배치
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.carousel.MaskableFrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/carousel_item_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:foreground="?attr/selectableItemBackground"
    app:shapeAppearance="?attr/shapeAppearanceCornerExtraLarge">

    <ImageView
        android:id="@+id/carousel_image_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="centerCrop"
        app:srcCompat="@mipmap/ic_launcher" />
</com.google.android.material.carousel.MaskableFrameLayout>




  • image 리스트에 저장
val imageRes = arrayOf(
	R.drawable.image_1, R.drawable.image_2, R.drawable.image_3,
	R.drawable.image_4, R.drawable.image_5, R.drawable.image_6,
	R.drawable.image_7, R.drawable.image_8, R.drawable.image_9,
	R.drawable.image_10
)
  • recyclerView Adapter
inner class RecyclerViewAdapter : RecyclerView.Adapter<RecyclerViewAdapter.ViewHolderClass>(){
    inner class ViewHolderClass(rowBinding: RowBinding) : RecyclerView.ViewHolder(rowBinding.root){

        var carouselImageView : ImageView

        init {
            carouselImageView = rowBinding.carouselImageView

            rowBinding.root.setOnClickListener {
                activityMainBinding.imageView.setImageResource(imageRes[adapterPosition])
            }
        }

    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolderClass {
        val rowBinding = RowBinding.inflate(layoutInflater)
        val viewHolderClass = ViewHolderClass(rowBinding)

        return viewHolderClass
    }

    override fun getItemCount(): Int {
        return imageRes.size
    }

    override fun onBindViewHolder(holder: ViewHolderClass, position: Int) {
        holder.carouselImageView.setImageResource(imageRes[position])
    }
}
  • layoutManager 설정
    • layout type
      • CarouselLayoutManager()
      • CarouselLayoutManager(MultiBrowseCarouselStrategy())
      • CarouselLayoutManager(HeroCarouselStrategy())
      • CarouselLayoutManager(FullScreenCarouselStrategy())
activityMainBinding.run{
    recyclerView.run{
        adapter = RecyclerViewAdapter()
        layoutManager = CarouselLayoutManager(FullScreenCarouselStrategy())
    }
}



🎞️ 실행 영상


  • CarouselLayoutManager(FullScreenCarouselStrategy())

  • CarouselLayoutManager()

0개의 댓글