feat: 콘텐츠 메인 - 새로운 콘텐츠, 큐레이션

- 포인트 사용이 가능한 콘텐츠의 썸네일 우측 상단에 포인트 사용 가능 표시
This commit is contained in:
2025-06-10 12:26:04 +09:00
parent f10d848797
commit ea766afba9
4 changed files with 39 additions and 6 deletions

View File

@@ -2,8 +2,6 @@ package kr.co.vividnext.sodalive.audio_content.all
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.graphics.Bitmap
import android.graphics.drawable.Drawable
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
@@ -15,12 +13,9 @@ import com.bumptech.glide.Glide
import com.bumptech.glide.load.resource.bitmap.CenterCrop import com.bumptech.glide.load.resource.bitmap.CenterCrop
import com.bumptech.glide.load.resource.bitmap.RoundedCorners import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import com.bumptech.glide.request.RequestOptions import com.bumptech.glide.request.RequestOptions
import com.bumptech.glide.request.target.CustomTarget
import com.bumptech.glide.request.transition.Transition
import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.audio_content.main.GetAudioContentMainItem import kr.co.vividnext.sodalive.audio_content.main.GetAudioContentMainItem
import kr.co.vividnext.sodalive.databinding.ItemAudioContentNewAllBinding import kr.co.vividnext.sodalive.databinding.ItemAudioContentNewAllBinding
import kr.co.vividnext.sodalive.extensions.dpToPx
import kr.co.vividnext.sodalive.extensions.moneyFormat import kr.co.vividnext.sodalive.extensions.moneyFormat
class AudioContentNewAllAdapter( class AudioContentNewAllAdapter(
@@ -47,11 +42,18 @@ class AudioContentNewAllAdapter(
) )
.into(binding.ivAudioContentCoverImage) .into(binding.ivAudioContentCoverImage)
val layoutParams = binding.ivAudioContentCoverImage.layoutParams as ConstraintLayout.LayoutParams val layoutParams =
binding.ivAudioContentCoverImage.layoutParams as ConstraintLayout.LayoutParams
layoutParams.width = itemWidth layoutParams.width = itemWidth
layoutParams.height = itemWidth layoutParams.height = itemWidth
binding.ivAudioContentCoverImage.layoutParams = layoutParams binding.ivAudioContentCoverImage.layoutParams = layoutParams
binding.ivPoint.visibility = if (item.isPointAvailable) {
View.VISIBLE
} else {
View.GONE
}
binding.ivAudioContentCreator.load(item.creatorProfileImageUrl) { binding.ivAudioContentCreator.load(item.creatorProfileImageUrl) {
crossfade(true) crossfade(true)
placeholder(R.drawable.ic_place_holder) placeholder(R.drawable.ic_place_holder)

View File

@@ -1,5 +1,6 @@
package kr.co.vividnext.sodalive.audio_content.main package kr.co.vividnext.sodalive.audio_content.main
import android.view.View
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import coil.load import coil.load
import coil.transform.CircleCropTransformation import coil.transform.CircleCropTransformation
@@ -14,6 +15,12 @@ class AudioContentMainItemViewHolder(
private val onClickCreator: (Long) -> Unit private val onClickCreator: (Long) -> Unit
) : RecyclerView.ViewHolder(binding.root) { ) : RecyclerView.ViewHolder(binding.root) {
fun bind(item: GetAudioContentMainItem) { fun bind(item: GetAudioContentMainItem) {
binding.ivPoint.visibility = if (item.isPointAvailable) {
View.VISIBLE
} else {
View.GONE
}
binding.ivAudioContentCoverImage.load(item.coverImageUrl) { binding.ivAudioContentCoverImage.load(item.coverImageUrl) {
crossfade(true) crossfade(true)
placeholder(R.drawable.ic_place_holder) placeholder(R.drawable.ic_place_holder)

View File

@@ -13,6 +13,18 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv_point"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2.7dp"
android:layout_marginEnd="2.7dp"
android:contentDescription="@null"
android:src="@drawable/ic_point"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="@+id/iv_audio_content_cover_image"
app:layout_constraintTop_toTopOf="@+id/iv_audio_content_cover_image" />
<TextView <TextView
android:id="@+id/tv_audio_content_title" android:id="@+id/tv_audio_content_title"
android:layout_width="0dp" android:layout_width="0dp"

View File

@@ -14,6 +14,18 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv_point"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginTop="2.7dp"
android:layout_marginEnd="2.7dp"
android:contentDescription="@null"
android:src="@drawable/ic_point"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="@+id/iv_audio_content_cover_image"
app:layout_constraintTop_toTopOf="@+id/iv_audio_content_cover_image" />
<LinearLayout <LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"