feat(user-channel): 유저 채널의 라이브 아이템 UI 수정
This commit is contained in:
@@ -177,8 +177,8 @@ dependencies {
|
|||||||
implementation "com.gauravk.audiovisualizer:audiovisualizer:0.9.2"
|
implementation "com.gauravk.audiovisualizer:audiovisualizer:0.9.2"
|
||||||
|
|
||||||
// Glide
|
// Glide
|
||||||
implementation 'com.github.bumptech.glide:glide:4.12.0'
|
implementation 'com.github.bumptech.glide:glide:5.0.5'
|
||||||
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
|
annotationProcessor 'com.github.bumptech.glide:compiler:5.0.5'
|
||||||
|
|
||||||
implementation "com.michalsvec:single-row-calednar:1.0.0"
|
implementation "com.michalsvec:single-row-calednar:1.0.0"
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,12 @@ data class GetCreatorProfileResponse(
|
|||||||
val liveRoomList: List<LiveRoomResponse>,
|
val liveRoomList: List<LiveRoomResponse>,
|
||||||
@SerializedName("contentList")
|
@SerializedName("contentList")
|
||||||
val contentList: List<GetAudioContentListItem>,
|
val contentList: List<GetAudioContentListItem>,
|
||||||
|
@SerializedName("latestContent")
|
||||||
|
val latestContent: GetAudioContentListItem?,
|
||||||
|
@SerializedName("totalContentCount")
|
||||||
|
val totalContentCount: Long,
|
||||||
|
@SerializedName("ownedContentCount")
|
||||||
|
val ownedContentCount: Long,
|
||||||
@SerializedName("notice")
|
@SerializedName("notice")
|
||||||
val notice: String,
|
val notice: String,
|
||||||
@SerializedName("communityPostList")
|
@SerializedName("communityPostList")
|
||||||
@@ -64,6 +70,7 @@ data class LiveRoomResponse(
|
|||||||
@SerializedName("content") val content: String,
|
@SerializedName("content") val content: String,
|
||||||
@SerializedName("isPaid") val isPaid: Boolean,
|
@SerializedName("isPaid") val isPaid: Boolean,
|
||||||
@SerializedName("beginDateTime") val beginDateTime: String,
|
@SerializedName("beginDateTime") val beginDateTime: String,
|
||||||
|
@SerializedName("beginDateTimeUtc") val beginDateTimeUtc: String,
|
||||||
@SerializedName("coverImageUrl") val coverImageUrl: String,
|
@SerializedName("coverImageUrl") val coverImageUrl: String,
|
||||||
@SerializedName("isAdult") val isAdult: Boolean,
|
@SerializedName("isAdult") val isAdult: Boolean,
|
||||||
@SerializedName("price") val price: Int,
|
@SerializedName("price") val price: Int,
|
||||||
|
|||||||
@@ -5,13 +5,16 @@ 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.core.content.ContextCompat
|
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import coil.load
|
import com.bumptech.glide.Glide
|
||||||
import coil.transform.RoundedCornersTransformation
|
import com.bumptech.glide.load.MultiTransformation
|
||||||
|
import com.bumptech.glide.load.resource.bitmap.CenterCrop
|
||||||
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
|
||||||
import kr.co.vividnext.sodalive.R
|
import kr.co.vividnext.sodalive.R
|
||||||
import kr.co.vividnext.sodalive.databinding.ItemUserProfileLiveBinding
|
import kr.co.vividnext.sodalive.databinding.ItemCreatorProfileLiveCardBinding
|
||||||
import kr.co.vividnext.sodalive.extensions.dpToPx
|
import kr.co.vividnext.sodalive.extensions.dpToPx
|
||||||
|
import kr.co.vividnext.sodalive.extensions.moneyFormat
|
||||||
|
import kr.co.vividnext.sodalive.extensions.parseUtcIsoLocalDateTime
|
||||||
|
|
||||||
class UserProfileLiveAdapter(
|
class UserProfileLiveAdapter(
|
||||||
private val onClickParticipant: (LiveRoomResponse) -> Unit,
|
private val onClickParticipant: (LiveRoomResponse) -> Unit,
|
||||||
@@ -22,103 +25,87 @@ class UserProfileLiveAdapter(
|
|||||||
|
|
||||||
inner class ViewHolder(
|
inner class ViewHolder(
|
||||||
private val context: Context,
|
private val context: Context,
|
||||||
private val binding: ItemUserProfileLiveBinding
|
private val binding: ItemCreatorProfileLiveCardBinding
|
||||||
) : RecyclerView.ViewHolder(binding.root) {
|
) : RecyclerView.ViewHolder(binding.root) {
|
||||||
@SuppressLint("SetTextI18n")
|
@SuppressLint("SetTextI18n")
|
||||||
fun bind(item: LiveRoomResponse) {
|
fun bind(item: LiveRoomResponse) {
|
||||||
binding.ivCover.load(item.coverImageUrl) {
|
Glide.with(context)
|
||||||
crossfade(true)
|
.load(item.coverImageUrl)
|
||||||
placeholder(R.drawable.ic_place_holder)
|
.placeholder(R.drawable.ic_place_holder)
|
||||||
transformations(RoundedCornersTransformation(4.7f.dpToPx()))
|
.transform(
|
||||||
}
|
MultiTransformation(
|
||||||
|
CenterCrop(),
|
||||||
|
RoundedCorners(16f.dpToPx().toInt())
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.into(binding.ivProfile)
|
||||||
|
|
||||||
binding.tvDate.text = item.beginDateTime
|
|
||||||
binding.tvNickname.text = item.managerNickname
|
|
||||||
binding.tvTitle.text = item.title
|
binding.tvTitle.text = item.title
|
||||||
|
binding.tvNickname.text = item.managerNickname
|
||||||
|
|
||||||
|
val dateMap = item.beginDateTimeUtc.parseUtcIsoLocalDateTime()
|
||||||
|
binding.tvDayOfWeek.text = dateMap["dayOfWeek"]
|
||||||
|
|
||||||
|
binding.ivLock.visibility = if (item.isPrivateRoom) {
|
||||||
|
View.VISIBLE
|
||||||
|
} else {
|
||||||
|
View.GONE
|
||||||
|
}
|
||||||
|
|
||||||
if (item.isActive && !item.channelName.isNullOrBlank()) {
|
if (item.isActive && !item.channelName.isNullOrBlank()) {
|
||||||
binding.bgCover.visibility = View.GONE
|
// on-air 상태인 라이브
|
||||||
binding.tvStatus.text = "LIVE"
|
binding.tvOnAir.visibility = View.VISIBLE
|
||||||
binding.tvStatus.setTextColor(ContextCompat.getColor(context, R.color.color_ff5c49))
|
binding.llDate.visibility = View.GONE
|
||||||
binding.tvStatus.setBackgroundResource(
|
|
||||||
R.drawable.bg_round_corner_3_3_transparent_ff5c49
|
|
||||||
)
|
|
||||||
|
|
||||||
binding.tvParticipate.text = if (!item.isPaid && item.price > 0) {
|
binding.tvTime.text = "On Air"
|
||||||
"${item.price}캔으로 지금 참여하기"
|
binding.tvCompleteReservation.visibility = View.GONE
|
||||||
|
|
||||||
|
if (item.price <= 0) {
|
||||||
|
binding.llCan.visibility = View.GONE
|
||||||
|
binding.tvFree.visibility = View.VISIBLE
|
||||||
} else {
|
} else {
|
||||||
"지금 참여하기"
|
binding.tvFree.visibility = View.GONE
|
||||||
|
binding.llCan.visibility = View.VISIBLE
|
||||||
|
|
||||||
|
binding.tvCan.text = item.price.moneyFormat()
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.tvParticipate.setOnClickListener { onClickParticipant(item) }
|
|
||||||
|
|
||||||
binding.tvParticipate.setTextColor(
|
|
||||||
ContextCompat.getColor(
|
|
||||||
context,
|
|
||||||
R.color.white
|
|
||||||
)
|
|
||||||
)
|
|
||||||
binding.tvParticipate.setBackgroundResource(
|
|
||||||
R.drawable.bg_round_corner_5_3_dd4500
|
|
||||||
)
|
|
||||||
} else if (item.isActive && item.channelName.isNullOrBlank()) {
|
} else if (item.isActive && item.channelName.isNullOrBlank()) {
|
||||||
binding.bgCover.visibility = View.GONE
|
// on-air가 아닌 상태의 라이브
|
||||||
binding.tvStatus.text = "예정"
|
binding.tvOnAir.visibility = View.GONE
|
||||||
binding.tvStatus.setTextColor(ContextCompat.getColor(context, R.color.color_fdca2f))
|
binding.llDate.visibility = View.VISIBLE
|
||||||
binding.tvStatus.setBackgroundResource(
|
|
||||||
R.drawable.bg_round_corner_3_3_transparent_fdca2f
|
binding.tvTime.text = dateMap["time"]
|
||||||
)
|
binding.tvMonth.text = "${dateMap["month"]}월"
|
||||||
|
binding.tvDay.text = dateMap["day"]
|
||||||
|
|
||||||
if (item.isReservation) {
|
if (item.isReservation) {
|
||||||
binding.tvParticipate.text = "예약완료"
|
binding.llCan.visibility = View.GONE
|
||||||
binding.tvParticipate.setTextColor(
|
binding.tvFree.visibility = View.GONE
|
||||||
ContextCompat.getColor(context, R.color.color_777777)
|
binding.tvCompleteReservation.visibility = View.VISIBLE
|
||||||
)
|
} else if (item.price <= 0) {
|
||||||
binding.tvParticipate.setBackgroundResource(
|
binding.llCan.visibility = View.GONE
|
||||||
R.drawable.bg_round_corner_5_3_525252
|
binding.tvCompleteReservation.visibility = View.GONE
|
||||||
)
|
binding.tvFree.visibility = View.VISIBLE
|
||||||
} else {
|
} else {
|
||||||
binding.tvParticipate.text = if (item.price > 0) {
|
binding.tvFree.visibility = View.GONE
|
||||||
"${item.price}캔으로 예약하기"
|
binding.tvCompleteReservation.visibility = View.GONE
|
||||||
} else {
|
binding.llCan.visibility = View.VISIBLE
|
||||||
"예약하기"
|
|
||||||
|
binding.tvCan.text = item.price.moneyFormat()
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.tvParticipate.setOnClickListener { onClickReservation(item) }
|
binding.ivLock.visibility = if (item.isPrivateRoom) {
|
||||||
|
View.VISIBLE
|
||||||
binding.tvParticipate.setTextColor(
|
|
||||||
ContextCompat.getColor(
|
|
||||||
context,
|
|
||||||
R.color.black
|
|
||||||
)
|
|
||||||
)
|
|
||||||
binding.tvParticipate.setBackgroundResource(
|
|
||||||
R.drawable.bg_round_corner_5_3_fdca2f
|
|
||||||
)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
binding.bgCover.visibility = View.VISIBLE
|
View.GONE
|
||||||
binding.tvStatus.text = "종료"
|
}
|
||||||
binding.tvStatus.setTextColor(ContextCompat.getColor(context, R.color.color_777777))
|
|
||||||
binding.tvStatus.setBackgroundResource(
|
|
||||||
R.drawable.bg_round_corner_3_3_transparent_777777
|
|
||||||
)
|
|
||||||
|
|
||||||
binding.tvParticipate.text = "다시듣기를 지원하지 않습니다"
|
|
||||||
|
|
||||||
binding.tvParticipate.setTextColor(
|
|
||||||
ContextCompat.getColor(context, R.color.color_777777)
|
|
||||||
)
|
|
||||||
binding.tvParticipate.setBackgroundResource(
|
|
||||||
R.drawable.bg_round_corner_5_3_525252
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ViewHolder(
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ViewHolder(
|
||||||
parent.context,
|
parent.context,
|
||||||
ItemUserProfileLiveBinding.inflate(
|
ItemCreatorProfileLiveCardBinding.inflate(
|
||||||
LayoutInflater.from(parent.context),
|
LayoutInflater.from(parent.context),
|
||||||
parent,
|
parent,
|
||||||
false
|
false
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import java.text.NumberFormat
|
|||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.Currency
|
import java.util.Currency
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
import java.util.TimeZone
|
||||||
|
|
||||||
fun String.convertDateFormat(
|
fun String.convertDateFormat(
|
||||||
from: String,
|
from: String,
|
||||||
@@ -67,3 +68,31 @@ fun String.formatMoney(currencyCode: String, locale: Locale = Locale.getDefault(
|
|||||||
val bd = this.toBigDecimal()
|
val bd = this.toBigDecimal()
|
||||||
return nf.format(bd)
|
return nf.format(bd)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun String.parseUtcIsoLocalDateTime(): Map<String, String> {
|
||||||
|
// 1. 서버가 내려준 포맷: "yyyy-MM-dd'T'HH:mm:ss"
|
||||||
|
val utcFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.getDefault())
|
||||||
|
utcFormat.timeZone = TimeZone.getTimeZone("UTC") // 서버가 UTC 기준으로 보낸 것
|
||||||
|
|
||||||
|
// 2. Date 객체 생성
|
||||||
|
val date = utcFormat.parse(this)!!
|
||||||
|
|
||||||
|
// 3. 월 (1~12)
|
||||||
|
val month = SimpleDateFormat("M", Locale.getDefault()).format(date)
|
||||||
|
|
||||||
|
// 4. 일 (1~31)
|
||||||
|
val day = SimpleDateFormat("d", Locale.getDefault()).format(date)
|
||||||
|
|
||||||
|
// 5. 요일 (예: "Mon", "목")
|
||||||
|
val dayOfWeek = SimpleDateFormat("E", Locale.getDefault()).format(date)
|
||||||
|
|
||||||
|
// 6. 시간 (예: "AM 05:00")
|
||||||
|
val time = SimpleDateFormat("a hh:mm", Locale.getDefault()).format(date)
|
||||||
|
|
||||||
|
return mapOf(
|
||||||
|
"month" to month,
|
||||||
|
"day" to day,
|
||||||
|
"dayOfWeek" to dayOfWeek,
|
||||||
|
"time" to time
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|||||||
@@ -14,10 +14,8 @@ import kr.co.vividnext.sodalive.databinding.ItemMyLiveReservationBinding
|
|||||||
import kr.co.vividnext.sodalive.databinding.LiveBookingCardBinding
|
import kr.co.vividnext.sodalive.databinding.LiveBookingCardBinding
|
||||||
import kr.co.vividnext.sodalive.extensions.dpToPx
|
import kr.co.vividnext.sodalive.extensions.dpToPx
|
||||||
import kr.co.vividnext.sodalive.extensions.moneyFormat
|
import kr.co.vividnext.sodalive.extensions.moneyFormat
|
||||||
|
import kr.co.vividnext.sodalive.extensions.parseUtcIsoLocalDateTime
|
||||||
import kr.co.vividnext.sodalive.live.GetRoomListResponse
|
import kr.co.vividnext.sodalive.live.GetRoomListResponse
|
||||||
import java.text.SimpleDateFormat
|
|
||||||
import java.util.Locale
|
|
||||||
import java.util.TimeZone
|
|
||||||
|
|
||||||
class LiveReservationAdapter(
|
class LiveReservationAdapter(
|
||||||
private val isMain: Boolean = false,
|
private val isMain: Boolean = false,
|
||||||
@@ -82,7 +80,7 @@ class LiveReservationAdapter(
|
|||||||
|
|
||||||
@SuppressLint("SetTextI18n")
|
@SuppressLint("SetTextI18n")
|
||||||
fun bind(item: GetRoomListResponse) {
|
fun bind(item: GetRoomListResponse) {
|
||||||
val dateMap = parseUtcIsoLocalDateTime(item.beginDateTimeUtc)
|
val dateMap = item.beginDateTimeUtc.parseUtcIsoLocalDateTime()
|
||||||
|
|
||||||
Glide
|
Glide
|
||||||
.with(context)
|
.with(context)
|
||||||
@@ -137,7 +135,7 @@ class LiveReservationAdapter(
|
|||||||
View.GONE
|
View.GONE
|
||||||
}
|
}
|
||||||
|
|
||||||
val dateMap = parseUtcIsoLocalDateTime(item.beginDateTimeUtc)
|
val dateMap = item.beginDateTimeUtc.parseUtcIsoLocalDateTime()
|
||||||
|
|
||||||
Glide
|
Glide
|
||||||
.with(context)
|
.with(context)
|
||||||
@@ -173,32 +171,4 @@ class LiveReservationAdapter(
|
|||||||
binding.root.setOnClickListener { onClick(item) }
|
binding.root.setOnClickListener { onClick(item) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun parseUtcIsoLocalDateTime(utcString: String): Map<String, String> {
|
|
||||||
// 1. 서버가 내려준 포맷: "yyyy-MM-dd'T'HH:mm:ss"
|
|
||||||
val utcFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.getDefault())
|
|
||||||
utcFormat.timeZone = TimeZone.getTimeZone("UTC") // 서버가 UTC 기준으로 보낸 것
|
|
||||||
|
|
||||||
// 2. Date 객체 생성
|
|
||||||
val date = utcFormat.parse(utcString)!!
|
|
||||||
|
|
||||||
// 3. 월 (1~12)
|
|
||||||
val month = SimpleDateFormat("M", Locale.getDefault()).format(date)
|
|
||||||
|
|
||||||
// 4. 일 (1~31)
|
|
||||||
val day = SimpleDateFormat("d", Locale.getDefault()).format(date)
|
|
||||||
|
|
||||||
// 5. 요일 (예: "Mon", "목")
|
|
||||||
val dayOfWeek = SimpleDateFormat("E", Locale.getDefault()).format(date)
|
|
||||||
|
|
||||||
// 6. 시간 (예: "AM 05:00")
|
|
||||||
val time = SimpleDateFormat("a hh:mm", Locale.getDefault()).format(date)
|
|
||||||
|
|
||||||
return mapOf(
|
|
||||||
"month" to month,
|
|
||||||
"day" to day,
|
|
||||||
"dayOfWeek" to dayOfWeek,
|
|
||||||
"time" to time
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
8
app/src/main/res/drawable/bg_round_corner_12_3bb9f1.xml
Normal file
8
app/src/main/res/drawable/bg_round_corner_12_3bb9f1.xml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<solid android:color="@color/color_3bb9f1" />
|
||||||
|
<corners android:radius="12dp" />
|
||||||
|
<stroke
|
||||||
|
android:width="1dp"
|
||||||
|
android:color="@color/color_3bb9f1" />
|
||||||
|
</shape>
|
||||||
6
app/src/main/res/drawable/bg_round_corner_999_ff5c49.xml
Normal file
6
app/src/main/res/drawable/bg_round_corner_999_ff5c49.xml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<solid android:color="#FF5C49" />
|
||||||
|
<corners android:radius="999dp" />
|
||||||
|
</shape>
|
||||||
@@ -65,21 +65,6 @@
|
|||||||
android:textSize="32sp"
|
android:textSize="32sp"
|
||||||
tools:text="김상담김상담김상담" />
|
tools:text="김상담김상담김상담" />
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/tv_follower_list"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="8dp"
|
|
||||||
android:layout_marginTop="6.7dp"
|
|
||||||
android:background="@drawable/bg_round_corner_16_7_transparent_3bb9f1"
|
|
||||||
android:fontFamily="@font/gmarket_sans_bold"
|
|
||||||
android:paddingHorizontal="16dp"
|
|
||||||
android:paddingVertical="8dp"
|
|
||||||
android:text="팔로워 리스트"
|
|
||||||
android:textColor="@color/white"
|
|
||||||
android:textSize="12sp"
|
|
||||||
android:visibility="gone" />
|
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/iv_notification"
|
android:id="@+id/iv_notification"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
@@ -97,7 +82,22 @@
|
|||||||
android:fontFamily="@font/pretendard_medium"
|
android:fontFamily="@font/pretendard_medium"
|
||||||
android:textColor="@color/white"
|
android:textColor="@color/white"
|
||||||
android:textSize="16sp"
|
android:textSize="16sp"
|
||||||
|
android:visibility="gone"
|
||||||
tools:text="팔로워 1,000명" />
|
tools:text="팔로워 1,000명" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_follower_list"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:background="@drawable/bg_round_corner_999_white"
|
||||||
|
android:fontFamily="@font/pretendard_bold"
|
||||||
|
android:gravity="center"
|
||||||
|
android:paddingVertical="8dp"
|
||||||
|
android:text="팔로워 리스트"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="16sp"
|
||||||
|
android:visibility="gone" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
|||||||
251
app/src/main/res/layout/item_creator_profile_live_card.xml
Normal file
251
app/src/main/res/layout/item_creator_profile_live_card.xml
Normal file
@@ -0,0 +1,251 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@drawable/live_booking_card_background"
|
||||||
|
android:padding="14dp">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/iv_profile"
|
||||||
|
android:layout_width="107dp"
|
||||||
|
android:layout_height="107dp"
|
||||||
|
android:contentDescription="@null"
|
||||||
|
android:scaleType="centerCrop"
|
||||||
|
android:src="@drawable/ic_placeholder_profile"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
tools:src="@tools:sample/avatars" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/iv_lock"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="4dp"
|
||||||
|
android:layout_marginTop="4dp"
|
||||||
|
android:background="@drawable/bg_circle_b3333333"
|
||||||
|
android:contentDescription="@null"
|
||||||
|
android:padding="4dp"
|
||||||
|
android:src="@drawable/ic_lock"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintStart_toStartOf="@+id/iv_profile"
|
||||||
|
app:layout_constraintTop_toTopOf="@+id/iv_profile" />
|
||||||
|
|
||||||
|
<!-- Content Area -->
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginHorizontal="16dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="vertical"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@+id/iv_profile"
|
||||||
|
app:layout_constraintEnd_toStartOf="@+id/fl_on_air_or_date"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/iv_profile"
|
||||||
|
app:layout_constraintTop_toTopOf="@+id/iv_profile">
|
||||||
|
<!-- Title -->
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_nickname"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:fontFamily="@font/pretendard_regular"
|
||||||
|
android:textColor="#FFFFFF"
|
||||||
|
android:textSize="18sp"
|
||||||
|
tools:text="우기라스" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<!-- Content -->
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_title"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginVertical="8dp"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:fontFamily="@font/pretendard_regular"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:textColor="#B0BEC5"
|
||||||
|
android:textSize="14sp"
|
||||||
|
tools:text="평범한 가족의 아슬아슬한 이중생활..." />
|
||||||
|
|
||||||
|
<!-- Time Info -->
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_day_of_week"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:fontFamily="@font/pretendard_regular"
|
||||||
|
android:textColor="#78909C"
|
||||||
|
android:textSize="14sp"
|
||||||
|
tools:text="월" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginHorizontal="4dp"
|
||||||
|
android:fontFamily="@font/pretendard_regular"
|
||||||
|
android:text="|"
|
||||||
|
android:textColor="#78909C"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_time"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:fontFamily="@font/pretendard_regular"
|
||||||
|
android:textColor="#98A2F6"
|
||||||
|
android:textSize="14sp"
|
||||||
|
tools:text="오후 03:30" />
|
||||||
|
</LinearLayout>
|
||||||
|
</LinearLayout>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:id="@+id/fl_on_air_or_date"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
<!-- OnAir Area -->
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_on_air"
|
||||||
|
android:layout_width="52dp"
|
||||||
|
android:layout_height="52dp"
|
||||||
|
android:background="@drawable/bg_round_corner_999_ff5c49"
|
||||||
|
android:fontFamily="@font/pretendard_bold"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="ON\nAIR"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:visibility="gone" />
|
||||||
|
|
||||||
|
<!-- Date Area -->
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/ll_date"
|
||||||
|
android:layout_width="52dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:visibility="gone">
|
||||||
|
|
||||||
|
<!-- Month -->
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@drawable/date_month_background"
|
||||||
|
android:gravity="center"
|
||||||
|
android:paddingVertical="4dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_month"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:fontFamily="@font/pretendard_bold"
|
||||||
|
android:lineSpacingMultiplier="1.2"
|
||||||
|
android:textColor="#FFFFFF"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:textStyle="bold"
|
||||||
|
tools:text="6월" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<!-- Day -->
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@drawable/date_day_background"
|
||||||
|
android:gravity="center"
|
||||||
|
android:paddingVertical="4dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_day"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:fontFamily="@font/pretendard_bold"
|
||||||
|
android:lineSpacingMultiplier="1.2"
|
||||||
|
android:textColor="#263238"
|
||||||
|
android:textSize="16sp"
|
||||||
|
tools:text="27" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
</LinearLayout>
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
<!-- Payment Status -->
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/ll_can"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@drawable/payment_background"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:minWidth="52dp"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingHorizontal="4dp"
|
||||||
|
android:paddingVertical="2dp"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="16dp"
|
||||||
|
android:layout_height="16dp"
|
||||||
|
android:layout_marginEnd="2dp"
|
||||||
|
android:contentDescription="@null"
|
||||||
|
android:src="@drawable/ic_can" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_can"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:fontFamily="@font/pretendard_regular"
|
||||||
|
android:textColor="#FFFFFF"
|
||||||
|
android:textSize="14sp"
|
||||||
|
tools:text="300" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_complete_reservation"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@drawable/reservation_complete_background"
|
||||||
|
android:fontFamily="@font/pretendard_regular"
|
||||||
|
android:minWidth="52dp"
|
||||||
|
android:padding="4dp"
|
||||||
|
android:text="예약완료"
|
||||||
|
android:textColor="#FFF"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_free"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@drawable/payment_free_background"
|
||||||
|
android:fontFamily="@font/pretendard_regular"
|
||||||
|
android:gravity="center"
|
||||||
|
android:minWidth="52dp"
|
||||||
|
android:padding="4dp"
|
||||||
|
android:text="무료"
|
||||||
|
android:textColor="#263238"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
@@ -14,17 +14,17 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_alignParentStart="true"
|
android:layout_alignParentStart="true"
|
||||||
android:fontFamily="@font/gmarket_sans_bold"
|
android:fontFamily="@font/pretendard_bold"
|
||||||
android:text="콘텐츠"
|
android:text="콘텐츠"
|
||||||
android:textColor="@color/color_eeeeee"
|
android:textColor="@color/white"
|
||||||
android:textSize="16.7sp" />
|
android:textSize="26sp" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tv_all"
|
android:id="@+id/tv_all"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_alignParentEnd="true"
|
android:layout_alignParentEnd="true"
|
||||||
android:fontFamily="@font/gmarket_sans_light"
|
android:fontFamily="@font/pretendard_light"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:text="전체보기"
|
android:text="전체보기"
|
||||||
android:textColor="@color/color_bbbbbb"
|
android:textColor="@color/color_bbbbbb"
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="21.3dp"
|
android:layout_marginTop="21.3dp"
|
||||||
android:background="@drawable/bg_round_corner_4_7_3bb9f1"
|
android:background="@drawable/bg_round_corner_4_7_3bb9f1"
|
||||||
android:fontFamily="@font/gmarket_sans_bold"
|
android:fontFamily="@font/pretendard_bold"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:paddingVertical="17dp"
|
android:paddingVertical="17dp"
|
||||||
android:text="새로운 콘텐츠 등록하기"
|
android:text="새로운 콘텐츠 등록하기"
|
||||||
|
|||||||
@@ -8,10 +8,10 @@
|
|||||||
android:id="@+id/tv_title"
|
android:id="@+id/tv_title"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:fontFamily="@font/gmarket_sans_bold"
|
android:fontFamily="@font/pretendard_bold"
|
||||||
android:text="라이브"
|
android:text="라이브"
|
||||||
android:textColor="@color/color_eeeeee"
|
android:textColor="@color/white"
|
||||||
android:textSize="16.7sp"
|
android:textSize="26sp"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
android:id="@+id/ll_roulette_menu"
|
android:id="@+id/ll_roulette_menu"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="21.3dp"
|
android:layout_marginTop="14dp"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
@@ -30,35 +30,35 @@
|
|||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:background="@drawable/bg_round_corner_4_7_3bb9f1"
|
android:background="@drawable/bg_round_corner_12_3bb9f1"
|
||||||
android:fontFamily="@font/gmarket_sans_bold"
|
android:fontFamily="@font/pretendard_bold"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:paddingVertical="17dp"
|
android:paddingVertical="12dp"
|
||||||
android:text="룰렛 설정"
|
android:text="룰렛 설정"
|
||||||
android:textColor="@color/white"
|
android:textColor="@color/white"
|
||||||
android:textSize="14.7sp" />
|
android:textSize="16sp" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tv_setting_menu"
|
android:id="@+id/tv_setting_menu"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
|
||||||
android:background="@drawable/bg_round_corner_4_7_3bb9f1"
|
|
||||||
android:fontFamily="@font/gmarket_sans_bold"
|
|
||||||
android:gravity="center"
|
|
||||||
android:paddingVertical="17dp"
|
|
||||||
android:layout_marginStart="8dp"
|
android:layout_marginStart="8dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:background="@drawable/bg_round_corner_12_3bb9f1"
|
||||||
|
android:fontFamily="@font/pretendard_bold"
|
||||||
|
android:gravity="center"
|
||||||
|
android:paddingVertical="12dp"
|
||||||
android:text="메뉴 설정"
|
android:text="메뉴 설정"
|
||||||
android:textColor="@color/white"
|
android:textColor="@color/white"
|
||||||
android:textSize="14.7sp" />
|
android:textSize="16sp" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
android:id="@+id/rv_live"
|
android:id="@+id/rv_live"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginVertical="14dp"
|
||||||
android:clipToPadding="false"
|
android:clipToPadding="false"
|
||||||
android:paddingVertical="20dp"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/ll_roulette_menu" />
|
app:layout_constraintTop_toBottomOf="@+id/ll_roulette_menu" />
|
||||||
|
|||||||
Reference in New Issue
Block a user