feat(series-main): 추천시리즈, 요일별 시리즈 동일한 레이아웃을 사용하여 아이템 크기와 내용이 동일하게 표시되도록 수정
This commit is contained in:
@@ -16,6 +16,7 @@ import kr.co.vividnext.sodalive.common.GridSpacingItemDecoration
|
|||||||
import kr.co.vividnext.sodalive.common.LoadingDialog
|
import kr.co.vividnext.sodalive.common.LoadingDialog
|
||||||
import kr.co.vividnext.sodalive.databinding.FragmentSeriesMainByGenreBinding
|
import kr.co.vividnext.sodalive.databinding.FragmentSeriesMainByGenreBinding
|
||||||
import kr.co.vividnext.sodalive.extensions.dpToPx
|
import kr.co.vividnext.sodalive.extensions.dpToPx
|
||||||
|
import kr.co.vividnext.sodalive.home.HomeSeriesAdapter
|
||||||
import org.koin.android.ext.android.inject
|
import org.koin.android.ext.android.inject
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
@@ -25,7 +26,7 @@ class SeriesMainByGenreFragment : BaseFragment<FragmentSeriesMainByGenreBinding>
|
|||||||
private val viewModel: SeriesMainByGenreViewModel by inject()
|
private val viewModel: SeriesMainByGenreViewModel by inject()
|
||||||
|
|
||||||
private lateinit var loadingDialog: LoadingDialog
|
private lateinit var loadingDialog: LoadingDialog
|
||||||
private lateinit var seriesAdapter: SeriesListAdapter
|
private lateinit var seriesAdapter: HomeSeriesAdapter
|
||||||
private lateinit var genreAdapter: GenreAdapter
|
private lateinit var genreAdapter: GenreAdapter
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
@@ -89,7 +90,7 @@ class SeriesMainByGenreFragment : BaseFragment<FragmentSeriesMainByGenreBinding>
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun setupSeriesView() {
|
private fun setupSeriesView() {
|
||||||
seriesAdapter = SeriesListAdapter(
|
seriesAdapter = HomeSeriesAdapter(
|
||||||
itemWidth = ((screenWidth - 24f.dpToPx() * 2 - 16f.dpToPx()) / 2f).roundToInt(),
|
itemWidth = ((screenWidth - 24f.dpToPx() * 2 - 16f.dpToPx()) / 2f).roundToInt(),
|
||||||
onClickItem = {
|
onClickItem = {
|
||||||
startActivity(
|
startActivity(
|
||||||
@@ -100,9 +101,7 @@ class SeriesMainByGenreFragment : BaseFragment<FragmentSeriesMainByGenreBinding>
|
|||||||
putExtra(Constants.EXTRA_SERIES_ID, it)
|
putExtra(Constants.EXTRA_SERIES_ID, it)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
},
|
}
|
||||||
onClickCreator = {},
|
|
||||||
isVisibleCreator = false
|
|
||||||
)
|
)
|
||||||
|
|
||||||
val spanCount = 2
|
val spanCount = 2
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import kr.co.vividnext.sodalive.common.LoadingDialog
|
|||||||
import kr.co.vividnext.sodalive.databinding.FragmentSeriesMainDayOfWeekBinding
|
import kr.co.vividnext.sodalive.databinding.FragmentSeriesMainDayOfWeekBinding
|
||||||
import kr.co.vividnext.sodalive.extensions.dpToPx
|
import kr.co.vividnext.sodalive.extensions.dpToPx
|
||||||
import kr.co.vividnext.sodalive.home.DayOfWeekAdapter
|
import kr.co.vividnext.sodalive.home.DayOfWeekAdapter
|
||||||
|
import kr.co.vividnext.sodalive.home.HomeSeriesAdapter
|
||||||
import kr.co.vividnext.sodalive.home.SeriesPublishedDaysOfWeek
|
import kr.co.vividnext.sodalive.home.SeriesPublishedDaysOfWeek
|
||||||
import org.koin.android.ext.android.inject
|
import org.koin.android.ext.android.inject
|
||||||
import java.util.Calendar
|
import java.util.Calendar
|
||||||
@@ -28,7 +29,7 @@ class SeriesMainDayOfWeekFragment : BaseFragment<FragmentSeriesMainDayOfWeekBind
|
|||||||
private val viewModel: SeriesMainDayOfWeekViewModel by inject()
|
private val viewModel: SeriesMainDayOfWeekViewModel by inject()
|
||||||
|
|
||||||
private lateinit var loadingDialog: LoadingDialog
|
private lateinit var loadingDialog: LoadingDialog
|
||||||
private lateinit var adapter: SeriesListAdapter
|
private lateinit var adapter: HomeSeriesAdapter
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
@@ -107,7 +108,7 @@ class SeriesMainDayOfWeekFragment : BaseFragment<FragmentSeriesMainDayOfWeekBind
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun setupSeriesView() {
|
private fun setupSeriesView() {
|
||||||
adapter = SeriesListAdapter(
|
adapter = HomeSeriesAdapter(
|
||||||
itemWidth = ((screenWidth - 24f.dpToPx() * 2 - 16f.dpToPx()) / 2f).roundToInt(),
|
itemWidth = ((screenWidth - 24f.dpToPx() * 2 - 16f.dpToPx()) / 2f).roundToInt(),
|
||||||
onClickItem = {
|
onClickItem = {
|
||||||
startActivity(
|
startActivity(
|
||||||
@@ -118,9 +119,7 @@ class SeriesMainDayOfWeekFragment : BaseFragment<FragmentSeriesMainDayOfWeekBind
|
|||||||
putExtra(Constants.EXTRA_SERIES_ID, it)
|
putExtra(Constants.EXTRA_SERIES_ID, it)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
},
|
}
|
||||||
onClickCreator = {},
|
|
||||||
isVisibleCreator = false
|
|
||||||
)
|
)
|
||||||
|
|
||||||
val spanCount = 2
|
val spanCount = 2
|
||||||
|
|||||||
@@ -6,7 +6,9 @@ import android.os.Bundle
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
import androidx.annotation.OptIn
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
|
import androidx.media3.common.util.UnstableApi
|
||||||
import androidx.recyclerview.widget.GridLayoutManager
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
@@ -14,7 +16,6 @@ import com.zhpan.bannerview.BaseBannerAdapter
|
|||||||
import com.zhpan.indicator.enums.IndicatorSlideMode
|
import com.zhpan.indicator.enums.IndicatorSlideMode
|
||||||
import com.zhpan.indicator.enums.IndicatorStyle
|
import com.zhpan.indicator.enums.IndicatorStyle
|
||||||
import kr.co.vividnext.sodalive.R
|
import kr.co.vividnext.sodalive.R
|
||||||
import kr.co.vividnext.sodalive.audio_content.series.SeriesListAdapter
|
|
||||||
import kr.co.vividnext.sodalive.audio_content.series.detail.SeriesDetailActivity
|
import kr.co.vividnext.sodalive.audio_content.series.detail.SeriesDetailActivity
|
||||||
import kr.co.vividnext.sodalive.base.BaseFragment
|
import kr.co.vividnext.sodalive.base.BaseFragment
|
||||||
import kr.co.vividnext.sodalive.common.Constants
|
import kr.co.vividnext.sodalive.common.Constants
|
||||||
@@ -37,7 +38,7 @@ class SeriesMainHomeFragment : BaseFragment<FragmentSeriesMainHomeBinding>(
|
|||||||
|
|
||||||
private lateinit var bannerAdapter: SeriesBannerAdapter
|
private lateinit var bannerAdapter: SeriesBannerAdapter
|
||||||
private lateinit var completedAdapter: HomeSeriesAdapter
|
private lateinit var completedAdapter: HomeSeriesAdapter
|
||||||
private lateinit var recommendAdapter: SeriesListAdapter
|
private lateinit var recommendAdapter: HomeSeriesAdapter
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
@@ -115,6 +116,7 @@ class SeriesMainHomeFragment : BaseFragment<FragmentSeriesMainHomeBinding>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OptIn(UnstableApi::class)
|
||||||
private fun setupCompletedSeriesView() {
|
private fun setupCompletedSeriesView() {
|
||||||
completedAdapter = HomeSeriesAdapter {
|
completedAdapter = HomeSeriesAdapter {
|
||||||
if (SharedPreferenceManager.token.isNotBlank()) {
|
if (SharedPreferenceManager.token.isNotBlank()) {
|
||||||
@@ -175,7 +177,7 @@ class SeriesMainHomeFragment : BaseFragment<FragmentSeriesMainHomeBinding>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun setupRecommendSeriesView() {
|
private fun setupRecommendSeriesView() {
|
||||||
recommendAdapter = SeriesListAdapter(
|
recommendAdapter = HomeSeriesAdapter(
|
||||||
itemWidth = ((screenWidth - 24f.dpToPx() * 2 - 16f.dpToPx()) / 2f).roundToInt(),
|
itemWidth = ((screenWidth - 24f.dpToPx() * 2 - 16f.dpToPx()) / 2f).roundToInt(),
|
||||||
onClickItem = {
|
onClickItem = {
|
||||||
startActivity(
|
startActivity(
|
||||||
@@ -186,9 +188,7 @@ class SeriesMainHomeFragment : BaseFragment<FragmentSeriesMainHomeBinding>(
|
|||||||
putExtra(Constants.EXTRA_SERIES_ID, it)
|
putExtra(Constants.EXTRA_SERIES_ID, it)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
},
|
}
|
||||||
onClickCreator = {},
|
|
||||||
isVisibleCreator = false
|
|
||||||
)
|
)
|
||||||
|
|
||||||
val spanCount = 2
|
val spanCount = 2
|
||||||
|
|||||||
@@ -1,41 +1,40 @@
|
|||||||
package kr.co.vividnext.sodalive.home
|
package kr.co.vividnext.sodalive.home
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.Context
|
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.bumptech.glide.Glide
|
import coil.load
|
||||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop
|
import coil.transform.RoundedCornersTransformation
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
|
import kr.co.vividnext.sodalive.R
|
||||||
import com.bumptech.glide.request.RequestOptions
|
|
||||||
import kr.co.vividnext.sodalive.audio_content.series.GetSeriesListResponse
|
import kr.co.vividnext.sodalive.audio_content.series.GetSeriesListResponse
|
||||||
import kr.co.vividnext.sodalive.databinding.ItemHomeSeriesBinding
|
import kr.co.vividnext.sodalive.databinding.ItemHomeSeriesBinding
|
||||||
import kr.co.vividnext.sodalive.extensions.dpToPx
|
import kr.co.vividnext.sodalive.extensions.dpToPx
|
||||||
|
|
||||||
class HomeSeriesAdapter(
|
class HomeSeriesAdapter(
|
||||||
|
private val itemWidth: Int? = null,
|
||||||
private val onClickItem: (Long) -> Unit
|
private val onClickItem: (Long) -> Unit
|
||||||
) : RecyclerView.Adapter<HomeSeriesAdapter.ViewHolder>() {
|
) : RecyclerView.Adapter<HomeSeriesAdapter.ViewHolder>() {
|
||||||
|
|
||||||
val items = mutableListOf<GetSeriesListResponse.SeriesListItem>()
|
val items = mutableListOf<GetSeriesListResponse.SeriesListItem>()
|
||||||
|
|
||||||
inner class ViewHolder(
|
inner class ViewHolder(
|
||||||
private val context: Context,
|
|
||||||
private val binding: ItemHomeSeriesBinding
|
private val binding: ItemHomeSeriesBinding
|
||||||
) : RecyclerView.ViewHolder(binding.root) {
|
) : RecyclerView.ViewHolder(binding.root) {
|
||||||
@SuppressLint("SetTextI18n")
|
@SuppressLint("SetTextI18n")
|
||||||
fun bind(item: GetSeriesListResponse.SeriesListItem) {
|
fun bind(item: GetSeriesListResponse.SeriesListItem) {
|
||||||
Glide
|
binding.ivCover.load(item.coverImage) {
|
||||||
.with(context)
|
placeholder(R.drawable.bg_placeholder)
|
||||||
.load(item.coverImage)
|
transformations(RoundedCornersTransformation(16f.dpToPx()))
|
||||||
.apply(
|
|
||||||
RequestOptions().transform(
|
if (itemWidth != null) {
|
||||||
CenterCrop(),
|
val lp = binding.ivCover.layoutParams
|
||||||
RoundedCorners(16f.dpToPx().toInt())
|
lp.width = itemWidth
|
||||||
)
|
lp.height = itemWidth * 432 / 306
|
||||||
)
|
binding.ivCover.layoutParams = lp
|
||||||
.into(binding.ivCover)
|
}
|
||||||
|
}
|
||||||
|
|
||||||
binding.tvTitle.text = item.title
|
binding.tvTitle.text = item.title
|
||||||
binding.tvNickname.text = item.creator.nickname
|
binding.tvNickname.text = item.creator.nickname
|
||||||
@@ -63,7 +62,6 @@ class HomeSeriesAdapter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ViewHolder(
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ViewHolder(
|
||||||
parent.context,
|
|
||||||
ItemHomeSeriesBinding.inflate(
|
ItemHomeSeriesBinding.inflate(
|
||||||
LayoutInflater.from(parent.context),
|
LayoutInflater.from(parent.context),
|
||||||
parent,
|
parent,
|
||||||
|
|||||||
Reference in New Issue
Block a user