diff --git a/app/src/main/java/com/umc/coumo/domain/model/BannerCardModel.kt b/app/src/main/java/com/umc/coumo/domain/model/BannerCardModel.kt new file mode 100644 index 0000000..55a0d61 --- /dev/null +++ b/app/src/main/java/com/umc/coumo/domain/model/BannerCardModel.kt @@ -0,0 +1,8 @@ +package com.umc.coumo.domain.model + +data class BannerCardModel( + val id: Int, +/* val title: String, + val content: String, + val type: String, //TODO(실제 타입 설정)*/ +) diff --git a/app/src/main/java/com/umc/coumo/presentation/adapter/BannerPagerAdapter.kt b/app/src/main/java/com/umc/coumo/presentation/adapter/BannerPagerAdapter.kt new file mode 100644 index 0000000..9b16a64 --- /dev/null +++ b/app/src/main/java/com/umc/coumo/presentation/adapter/BannerPagerAdapter.kt @@ -0,0 +1,40 @@ +package com.umc.coumo.presentation.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.ListAdapter +import androidx.recyclerview.widget.RecyclerView +import com.umc.coumo.databinding.ItemBannerBinding +import com.umc.coumo.domain.model.BannerCardModel +import com.umc.coumo.utils.ItemDiffCallback + +class BannerPagerAdapter(val context: Context) : ListAdapter( + ItemDiffCallback( + onContentsTheSame = {old, new -> old == new}, + onItemsTheSame = {old, new -> old.id == new.id} + ) +){ + inner class ItemViewHolder( + private val binding: ItemBannerBinding + ): RecyclerView.ViewHolder(binding.root) { + fun bind(item: BannerCardModel) { + + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + val inflater = LayoutInflater.from(parent.context) + return ItemViewHolder(ItemBannerBinding.inflate(inflater, parent, false)) + } + + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + val item = getItem(position) + + when (holder) { + is ItemViewHolder -> { + holder.bind(item) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/umc/coumo/presentation/fragment/HomeMainFragment.kt b/app/src/main/java/com/umc/coumo/presentation/fragment/HomeMainFragment.kt index aebad9e..3826a66 100644 --- a/app/src/main/java/com/umc/coumo/presentation/fragment/HomeMainFragment.kt +++ b/app/src/main/java/com/umc/coumo/presentation/fragment/HomeMainFragment.kt @@ -3,8 +3,15 @@ package com.umc.coumo.presentation.fragment import android.os.Bundle import android.view.View import androidx.navigation.fragment.findNavController +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.viewpager2.widget.ViewPager2 import com.umc.coumo.R import com.umc.coumo.databinding.FragmentHomeMainBinding +import com.umc.coumo.domain.model.BannerCardModel +import com.umc.coumo.domain.model.StoreInfoModel +import com.umc.coumo.presentation.adapter.BannerPagerAdapter +import com.umc.coumo.presentation.adapter.StoreInfoAdapter +import com.umc.coumo.utils.ItemSpacingDecoration import com.umc.coumo.utils.binding.BindingFragment class HomeMainFragment: BindingFragment(R.layout.fragment_home_main) { @@ -12,8 +19,69 @@ class HomeMainFragment: BindingFragment(R.layout.fragme override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.btnTest.setOnClickListener { - findNavController().navigate(R.id.action_homeMainFragment_to_homeSubFragment) + setBanner() + setRecyclerView() + setButton() + } + + private fun setButton() { + binding.ivCafe.setOnClickListener { + val bundle = Bundle().apply { + putString("type","cafe") + } + findNavController().navigate( + R.id.action_homeMainFragment_to_homeSubFragment, bundle + ) + } + } + + private fun setRecyclerView() { + val storeInfoAdapter = StoreInfoAdapter() + + binding.rvPopular.apply { + adapter = storeInfoAdapter + addItemDecoration(ItemSpacingDecoration(requireContext(),resources.getDimensionPixelSize(R.dimen.item_between_horizontal))) + layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false) } + + val list = listOf( + StoreInfoModel(1, null,"앙떼띠 로스터리(강남점)", "강남구 테헤란로 43-7", "양떼띠 로스터리는 2017년에 오픈한 강남의 유명 카페입니다. 강남역 직장인들을 위해 평일 오전 7시~9시에\n" + + "아메리카노 2000원 이벤트를 진행 중입니다."), + StoreInfoModel(2, null,"앙떼띠 로스터리(강남점)", "강남구 테헤란로 43-7", "양떼띠 로스터리는 2017년에 오픈한 강남의 유명 카페입니다. 강남역 직장인들을 위해 평일 오전 7시~9시에\n" + + "아메리카노 2000원 이벤트를 진행 중입니다."), + StoreInfoModel(3, null,"앙떼띠 로스터리(강남점)", "강남구 테헤란로 43-7", "양떼띠 로스터리는 2017년에 오픈한 강남의 유명 카페입니다. 강남역 직장인들을 위해 평일 오전 7시~9시에\n" + + "아메리카노 2000원 이벤트를 진행 중입니다."), + StoreInfoModel(4, null,"앙떼띠 로스터리(강남점)", "강남구 테헤란로 43-7", "양떼띠 로스터리는 2017년에 오픈한 강남의 유명 카페입니다. 강남역 직장인들을 위해 평일 오전 7시~9시에\n" + + "아메리카노 2000원 이벤트를 진행 중입니다."), + ) + + storeInfoAdapter.submitList(list) + } + + private fun setBanner() { + val bannerAdapter = BannerPagerAdapter(requireContext()) + binding.bannerHome.adapter = bannerAdapter + val bannerItems = listOf( + BannerCardModel(1), + BannerCardModel(2), + ) + bannerAdapter.submitList(bannerItems) + + val current = 1 + val total = bannerAdapter.itemCount + + val indicator = "$current / $total" + + binding.tvIndicator.text = indicator + + binding.bannerHome.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() { + override fun onPageSelected(position: Int) { + val currentPage = position + 1 + val totalPages = bannerAdapter.itemCount + + val indicatorText = "$currentPage / $totalPages" + binding.tvIndicator.text = indicatorText + } + }) } } \ No newline at end of file diff --git a/app/src/main/res/drawable/image_beauty.png b/app/src/main/res/drawable/image_beauty.png new file mode 100644 index 0000000..6814af5 Binary files /dev/null and b/app/src/main/res/drawable/image_beauty.png differ diff --git a/app/src/main/res/drawable/image_cafe.png b/app/src/main/res/drawable/image_cafe.png new file mode 100644 index 0000000..2086457 Binary files /dev/null and b/app/src/main/res/drawable/image_cafe.png differ diff --git a/app/src/main/res/drawable/image_class.png b/app/src/main/res/drawable/image_class.png new file mode 100644 index 0000000..d9ebbca Binary files /dev/null and b/app/src/main/res/drawable/image_class.png differ diff --git a/app/src/main/res/drawable/image_food.png b/app/src/main/res/drawable/image_food.png new file mode 100644 index 0000000..11ad64b Binary files /dev/null and b/app/src/main/res/drawable/image_food.png differ diff --git a/app/src/main/res/drawable/image_retail_1.png b/app/src/main/res/drawable/image_retail_1.png new file mode 100644 index 0000000..c7ae45f Binary files /dev/null and b/app/src/main/res/drawable/image_retail_1.png differ diff --git a/app/src/main/res/drawable/image_retail_2.png b/app/src/main/res/drawable/image_retail_2.png new file mode 100644 index 0000000..f004993 Binary files /dev/null and b/app/src/main/res/drawable/image_retail_2.png differ diff --git a/app/src/main/res/drawable/shape_rect_round_4.xml b/app/src/main/res/drawable/shape_rect_round_4.xml new file mode 100644 index 0000000..c0f9462 --- /dev/null +++ b/app/src/main/res/drawable/shape_rect_round_4.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home_main.xml b/app/src/main/res/layout/fragment_home_main.xml index 0e4a93d..3016744 100644 --- a/app/src/main/res/layout/fragment_home_main.xml +++ b/app/src/main/res/layout/fragment_home_main.xml @@ -66,15 +66,148 @@ app:layout_constraintEnd_toEndOf="parent"/> - -