feat: 메인 라이브

- 새로운 UI의 기본 골격 적용
This commit is contained in:
2025-07-16 22:07:07 +09:00
parent 386f9aae32
commit 0c7c7946c6
11 changed files with 219 additions and 391 deletions

View File

@@ -141,12 +141,6 @@ object SharedPreferenceManager {
sharedPreferences[Constants.PREF_PUSH_TOKEN] = value
}
var isFollowedCreatorLive: Boolean
get() = sharedPreferences[Constants.PREF_IS_FOLLOWED_CREATOR_LIVE, false]
set(value) {
sharedPreferences[Constants.PREF_IS_FOLLOWED_CREATOR_LIVE] = value
}
var isContentPlayLoop: Boolean
get() = sharedPreferences[Constants.PREF_IS_CONTENT_PLAY_LOOP, false]
set(value) {

View File

@@ -5,7 +5,6 @@ import android.app.Activity
import android.content.Intent
import android.content.SharedPreferences
import android.graphics.Rect
import android.net.Uri
import android.os.Bundle
import android.os.Handler
import android.os.Looper
@@ -23,7 +22,6 @@ import com.zhpan.indicator.enums.IndicatorSlideMode
import com.zhpan.indicator.enums.IndicatorStyle
import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.audio_content.AudioContentPlayService
import kr.co.vividnext.sodalive.audio_content.all.by_theme.AudioContentAllByThemeActivity
import kr.co.vividnext.sodalive.audio_content.player.AudioContentPlayerService
import kr.co.vividnext.sodalive.base.BaseFragment
import kr.co.vividnext.sodalive.common.Constants
@@ -36,7 +34,6 @@ import kr.co.vividnext.sodalive.explorer.profile.creator_community.all.CreatorCo
import kr.co.vividnext.sodalive.extensions.dpToPx
import kr.co.vividnext.sodalive.extensions.moneyFormat
import kr.co.vividnext.sodalive.following.FollowingCreatorActivity
import kr.co.vividnext.sodalive.live.event_banner.EventBannerAdapter
import kr.co.vividnext.sodalive.live.now.LiveNowAdapter
import kr.co.vividnext.sodalive.live.now.all.LiveNowAllActivity
import kr.co.vividnext.sodalive.live.recommend.RecommendLiveAdapter
@@ -54,7 +51,8 @@ import kr.co.vividnext.sodalive.live.room.dialog.LiveRoomPasswordDialog
import kr.co.vividnext.sodalive.live.room.update.LiveRoomEditActivity
import kr.co.vividnext.sodalive.main.MainActivity
import kr.co.vividnext.sodalive.message.MessageActivity
import kr.co.vividnext.sodalive.settings.event.EventDetailActivity
import kr.co.vividnext.sodalive.mypage.can.charge.CanChargeActivity
import kr.co.vividnext.sodalive.search.SearchActivity
import kr.co.vividnext.sodalive.settings.notification.MemberRole
import org.koin.android.ext.android.inject
import java.text.SimpleDateFormat
@@ -121,24 +119,6 @@ class LiveFragment : BaseFragment<FragmentLiveBinding>(FragmentLiveBinding::infl
SharedPreferenceManager.registerOnSharedPreferenceChangeListener(preferenceChangeListener)
setupView()
setupRecommendLive()
setupRecommendChannel()
setupLiveNow()
setupLiveReservation()
setupEvent()
setupCommunityPost()
binding.llReviewLive.setOnClickListener {
if (SharedPreferenceManager.token.isNotBlank()) {
startActivity(
Intent(requireContext(), AudioContentAllByThemeActivity::class.java).apply {
putExtra(Constants.EXTRA_THEME_ID, 7L)
}
)
} else {
(requireActivity() as MainActivity).showLoginActivity()
}
}
message = "라이브를 불러오고 있습니다."
viewModel.getSummary()
@@ -175,6 +155,48 @@ class LiveFragment : BaseFragment<FragmentLiveBinding>(FragmentLiveBinding::infl
val intent = Intent(requireContext(), LiveRoomCreateActivity::class.java)
activityResultLauncher.launch(intent)
}
setupToolbar()
setupLiveNow()
setupCommunityPost()
setupRecommendLive()
setupRecommendChannel()
setupLiveReservation()
}
private fun setupToolbar() {
if (SharedPreferenceManager.token.isNotBlank()) {
binding.llShortIcon.visibility = View.VISIBLE
binding.ivSearch.setOnClickListener {
startActivity(
Intent(
requireContext(),
SearchActivity::class.java
)
)
}
binding.ivCharge.setOnClickListener {
startActivity(
Intent(
requireContext(),
CanChargeActivity::class.java
)
)
}
binding.ivMessage.setOnClickListener {
startActivity(
Intent(
requireContext(),
MessageActivity::class.java
)
)
}
} else {
binding.llShortIcon.visibility = View.GONE
}
}
private fun refreshSummary() {
@@ -188,22 +210,6 @@ class LiveFragment : BaseFragment<FragmentLiveBinding>(FragmentLiveBinding::infl
@SuppressLint("NotifyDataSetChanged")
private fun setupRecommendLive() {
binding.layoutRecommendLive.ivMessage.visibility = if (
SharedPreferenceManager.token.isNotBlank()
) {
View.VISIBLE
} else {
View.GONE
}
binding.layoutRecommendLive.ivMessage.setOnClickListener {
if (SharedPreferenceManager.token.isNotBlank()) {
startActivity(Intent(requireContext(), MessageActivity::class.java))
} else {
(requireActivity() as MainActivity).showLoginActivity()
}
}
val layoutParams = binding
.layoutRecommendLive
.pager
@@ -255,6 +261,12 @@ class LiveFragment : BaseFragment<FragmentLiveBinding>(FragmentLiveBinding::infl
if (it.isNotEmpty()) {
binding.layoutRecommendLive.root.visibility = View.VISIBLE
binding.layoutRecommendLive.pager.refreshData(it)
if (it.size > 1) {
binding.layoutRecommendLive.indicator2.visibility = View.VISIBLE
} else {
binding.layoutRecommendLive.indicator2.visibility = View.GONE
}
} else {
binding.layoutRecommendLive.root.visibility = View.GONE
}
@@ -304,17 +316,17 @@ class LiveFragment : BaseFragment<FragmentLiveBinding>(FragmentLiveBinding::infl
when (parent.getChildAdapterPosition(view)) {
0 -> {
outRect.left = 0.dpToPx().toInt()
outRect.right = 8.3f.dpToPx().toInt()
outRect.right = 8f.dpToPx().toInt()
}
liveRecommendChannelAdapter.itemCount - 1 -> {
outRect.left = 8.3f.dpToPx().toInt()
outRect.left = 8f.dpToPx().toInt()
outRect.right = 0.dpToPx().toInt()
}
else -> {
outRect.left = 8.3f.dpToPx().toInt()
outRect.right = 8.3f.dpToPx().toInt()
outRect.left = 8f.dpToPx().toInt()
outRect.right = 8f.dpToPx().toInt()
}
}
}
@@ -323,36 +335,16 @@ class LiveFragment : BaseFragment<FragmentLiveBinding>(FragmentLiveBinding::infl
binding.layoutRecommendChannel.rvRecommendChannel.adapter = liveRecommendChannelAdapter
if (SharedPreferenceManager.token.isNotBlank()) {
binding.layoutRecommendChannel.tvFollowingChannel.visibility = View.VISIBLE
binding.layoutRecommendChannel.ivSwitch.visibility = View.VISIBLE
binding.layoutRecommendChannel.ivSwitch.setOnClickListener {
viewModel.toggleIsFollowedCreatorLive()
viewModel.recommendChannelLiveData.observe(viewLifecycleOwner) {
if (it.isNotEmpty()) {
binding.layoutRecommendChannel.root.visibility = View.VISIBLE
liveRecommendChannelAdapter.addItems(it)
} else {
binding.layoutRecommendChannel.root.visibility = View.GONE
}
}
} else {
binding.layoutRecommendChannel.tvFollowingChannel.visibility = View.GONE
binding.layoutRecommendChannel.ivSwitch.visibility = View.GONE
}
viewModel.recommendChannelLiveData.observe(viewLifecycleOwner) {
binding.layoutRecommendChannel.root.visibility = View.VISIBLE
liveRecommendChannelAdapter.addItems(it)
binding.layoutRecommendChannel.rvRecommendChannel.requestLayout()
binding.layoutRecommendChannel.root.requestLayout()
}
viewModel.isFollowedCreatorLive.observe(viewLifecycleOwner) {
liveRecommendChannelAdapter.isFollowedCreatorLive = it
liveRecommendChannelAdapter.clear()
if (it) {
binding.layoutRecommendChannel.ivSwitch.setImageResource(R.drawable.btn_toggle_on_big)
binding.layoutRecommendChannel.llTitle2.visibility = View.VISIBLE
binding.layoutRecommendChannel.llTitle1.visibility = View.GONE
} else {
binding.layoutRecommendChannel.ivSwitch.setImageResource(R.drawable.btn_toggle_off_big)
binding.layoutRecommendChannel.llTitle1.visibility = View.VISIBLE
binding.layoutRecommendChannel.llTitle2.visibility = View.GONE
}
binding.layoutRecommendChannel.root.visibility = View.GONE
}
}
@@ -376,7 +368,7 @@ class LiveFragment : BaseFragment<FragmentLiveBinding>(FragmentLiveBinding::infl
val recyclerView = binding
.layoutLiveNow
.rvSudaNow
.rvLiveNow
liveNowAdapter = LiveNowAdapter {
if (SharedPreferenceManager.token.isNotBlank()) {
@@ -459,7 +451,7 @@ class LiveFragment : BaseFragment<FragmentLiveBinding>(FragmentLiveBinding::infl
private fun setupLiveReservation() {
val recyclerView = binding
.layoutLiveReservation
.rvSudaReservation
.rvLiveReservation
liveReservationAdapter = LiveReservationAdapter(isMain = true) {
if (SharedPreferenceManager.token.isNotBlank()) {
@@ -555,58 +547,6 @@ class LiveFragment : BaseFragment<FragmentLiveBinding>(FragmentLiveBinding::infl
}
}
@SuppressLint("NotifyDataSetChanged")
private fun setupEvent() {
val imageSliderLp = binding.eventBannerSlider.layoutParams
imageSliderLp.width = screenWidth
imageSliderLp.height = (screenWidth * 300) / 1000
binding.eventBannerSlider.layoutParams = imageSliderLp
binding.eventBannerSlider.apply {
adapter = EventBannerAdapter(requireContext()) {
if (SharedPreferenceManager.token.isNotBlank()) {
if (it.detailImageUrl != null) {
val intent = Intent(requireActivity(), EventDetailActivity::class.java)
intent.putExtra(Constants.EXTRA_EVENT, it)
startActivity(intent)
} else if (!it.link.isNullOrBlank()) {
startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse(it.link)
)
)
}
} else {
(requireActivity() as MainActivity).showLoginActivity()
}
} as BaseBannerAdapter<Any>
setLifecycleRegistry(lifecycle)
setScrollDuration(800)
}.create()
binding.eventBannerSlider
.setIndicatorView(binding.indicator)
.setIndicatorStyle(IndicatorStyle.ROUND_RECT)
.setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
.setIndicatorVisibility(View.GONE)
.setIndicatorSliderColor(
ContextCompat.getColor(requireContext(), R.color.color_909090),
ContextCompat.getColor(requireContext(), R.color.color_3bb9f1)
)
.setIndicatorSliderWidth(4f.dpToPx().toInt(), 10f.dpToPx().toInt())
.setIndicatorHeight(4f.dpToPx().toInt())
viewModel.eventLiveData.observe(viewLifecycleOwner) {
if (it.isNotEmpty()) {
binding.eventBannerSlider.visibility = View.VISIBLE
binding.eventBannerSlider.refreshData(it)
} else {
binding.eventBannerSlider.visibility = View.GONE
}
}
}
@SuppressLint("NotifyDataSetChanged")
private fun setupCommunityPost() {
val recyclerView = binding.rvCommunityPost
@@ -664,11 +604,13 @@ class LiveFragment : BaseFragment<FragmentLiveBinding>(FragmentLiveBinding::infl
viewModel.communityPostItemLiveData.observe(viewLifecycleOwner) {
if (it.isNotEmpty()) {
recyclerView.visibility = View.VISIBLE
binding.tvCommunityPost.visibility = View.VISIBLE
creatorCommunityAdapter.items.clear()
creatorCommunityAdapter.items.addAll(it)
creatorCommunityAdapter.notifyDataSetChanged()
} else {
recyclerView.visibility = View.GONE
binding.tvCommunityPost.visibility = View.GONE
}
}
}

View File

@@ -41,12 +41,6 @@ class LiveViewModel(
val recommendLiveData: LiveData<List<GetRecommendLiveResponse>>
get() = _recommendLiveData
private val _isFollowedCreatorLive = MutableLiveData(
SharedPreferenceManager.isFollowedCreatorLive
)
val isFollowedCreatorLive: LiveData<Boolean>
get() = _isFollowedCreatorLive
private val _recommendChannelLiveData = MutableLiveData<List<GetRecommendChannelResponse>>()
val recommendChannelLiveData: LiveData<List<GetRecommendChannelResponse>>
get() = _recommendChannelLiveData
@@ -71,17 +65,6 @@ class LiveViewModel(
var isLast = false
private val pageSize = 10
fun toggleIsFollowedCreatorLive() {
val isOn = !_isFollowedCreatorLive.value!!
SharedPreferenceManager.isFollowedCreatorLive = isOn
_isFollowedCreatorLive.value = isOn
if (_isFollowedCreatorLive.value!!) {
getFollowedChannelList()
} else {
getRecommendChannelList()
}
}
private fun getFollowedChannelList() {
compositeDisposable.add(
liveRecommendRepository.getFollowingChannelList(
@@ -112,36 +95,6 @@ class LiveViewModel(
)
}
private fun getRecommendChannelList() {
compositeDisposable.add(
liveRecommendRepository.getRecommendChannelList(
token = "Bearer ${SharedPreferenceManager.token}"
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{
if (it.success && it.data != null) {
_recommendChannelLiveData.postValue(it.data!!)
} else {
if (it.message != null) {
_toastLiveData.postValue(it.message)
} else {
_toastLiveData.postValue(
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
)
}
}
},
{
_isLoading.value = false
it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
}
)
)
}
private fun getLatestPostListFromCreatorsYouFollow() {
compositeDisposable.add(
creatorCommunityRepository.getLatestPostListFromCreatorsYouFollow(
@@ -174,13 +127,9 @@ class LiveViewModel(
fun getSummary() {
if (!_isLoading.value!!) {
if (_isFollowedCreatorLive.value!!) {
getFollowedChannelList()
} else {
getRecommendChannelList()
}
if (SharedPreferenceManager.token.isNotBlank()) {
getFollowedChannelList()
getLatestPostListFromCreatorsYouFollow()
}

View File

@@ -17,8 +17,6 @@ class LiveRecommendChannelAdapter(
private val onClickMore: () -> Unit,
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
var isFollowedCreatorLive = false
private val items = mutableListOf<GetRecommendChannelResponse>()
class FooterViewHolder(
@@ -112,13 +110,7 @@ class LiveRecommendChannelAdapter(
}
}
override fun getItemCount(): Int {
return if (isFollowedCreatorLive) {
items.size + 1
} else {
items.size
}
}
override fun getItemCount() = items.size + 1
override fun getItemViewType(position: Int): Int {
return if (position == items.size) {

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#263238" />
<corners android:radius="16dp" />
</shape>

View File

@@ -4,86 +4,114 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/main_toolbar"
android:layout_width="0dp"
android:layout_height="?attr/actionBarSize"
android:paddingHorizontal="24dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:contentDescription="@null"
android:src="@drawable/img_text_logo" />
<LinearLayout
android:id="@+id/ll_short_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:orientation="horizontal"
android:visibility="gone">
<ImageView
android:id="@+id/iv_search"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@null"
android:src="@drawable/ic_search_white" />
<ImageView
android:id="@+id/iv_charge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:contentDescription="@null"
android:src="@drawable/ic_can_circle" />
<ImageView
android:id="@+id/iv_message"
android:layout_width="25dp"
android:layout_height="25dp"
android:contentDescription="@null"
android:src="@drawable/ic_message" />
</LinearLayout>
</RelativeLayout>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/main_toolbar">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<include
android:id="@+id/layout_recommend_live"
layout="@layout/layout_recommend_live"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13.3dp"
android:layout_marginTop="13.3dp"
android:layout_marginBottom="40dp" />
<LinearLayout
android:id="@+id/ll_review_live"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13.3dp"
android:layout_marginBottom="40dp"
android:background="@drawable/img_bg_review_live"
android:gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawablePadding="2.7dp"
android:fontFamily="@font/gmarket_sans_bold"
android:gravity="center"
android:text="라이브 다시듣기"
android:textColor="@color/color_672bff"
android:textSize="16.7sp"
app:drawableStartCompat="@drawable/ic_thumb_play_purple" />
</LinearLayout>
<include
android:id="@+id/layout_recommend_channel"
layout="@layout/layout_live_recommend_channel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13.3dp" />
android:orientation="vertical"
android:paddingVertical="24dp">
<include
android:id="@+id/layout_live_now"
layout="@layout/layout_live_now"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dp" />
android:layout_marginBottom="48dp" />
<com.zhpan.bannerview.BannerViewPager
android:id="@+id/event_banner_slider"
<TextView
android:id="@+id/tv_community_post"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dp" />
<com.zhpan.indicator.IndicatorView
android:id="@+id/indicator"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="6.7dp" />
android:layout_marginHorizontal="24dp"
android:layout_marginBottom="14dp"
android:fontFamily="@font/pretendard_bold"
android:text="커뮤니티"
android:textColor="@color/color_3bb9f1"
android:textSize="26sp" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_community_post"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:layout_marginBottom="48dp"
android:visibility="gone" />
<include
android:id="@+id/layout_recommend_live"
layout="@layout/layout_recommend_live"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="48dp" />
<include
android:id="@+id/layout_recommend_channel"
layout="@layout/layout_live_recommend_channel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="48dp" />
<include
android:id="@+id/layout_live_reservation"
layout="@layout/layout_live_reservation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dp" />
android:layout_height="wrap_content" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>

View File

@@ -29,7 +29,7 @@
android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal"
android:background="@drawable/bg_round_corner_6_7_3bb9f1"
android:fontFamily="@font/gmarket_sans_bold"
android:fontFamily="@font/pretendard_bold"
android:paddingHorizontal="5.7dp"
android:paddingVertical="2.7dp"
android:text="LIVE"
@@ -42,12 +42,12 @@
android:id="@+id/tv_recommend_channel_nickname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="11.3dp"
android:layout_marginTop="12dp"
android:ellipsize="end"
android:fontFamily="@font/gmarket_sans_medium"
android:fontFamily="@font/pretendard_regular"
android:lines="1"
android:textColor="@color/color_bbbbbb"
android:textSize="11.3sp"
android:textColor="@color/white"
android:textSize="14sp"
tools:text="검은사신" />
</LinearLayout>

View File

@@ -8,7 +8,7 @@
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingHorizontal="13.3dp">
android:paddingHorizontal="24dp">
<LinearLayout
android:layout_width="match_parent"
@@ -18,18 +18,18 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold"
android:fontFamily="@font/pretendard_bold"
android:text="지금 "
android:textColor="@color/color_eeeeee"
android:textSize="18.3sp" />
android:textColor="@color/color_3bb9f1"
android:textSize="26sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold"
android:fontFamily="@font/pretendard_bold"
android:text="라이브중"
android:textColor="@color/color_ff5c49"
android:textSize="18.3sp" />
android:textColor="@color/white"
android:textSize="26sp" />
</LinearLayout>
<TextView
@@ -38,29 +38,29 @@
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:fontFamily="@font/gmarket_sans_light"
android:fontFamily="@font/pretendard_regular"
android:text="전체보기"
android:textColor="@color/color_bbbbbb"
android:textSize="11.3sp" />
android:textColor="#78909C"
android:textSize="14sp" />
</RelativeLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_suda_now"
android:id="@+id/rv_live_now"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="28.3dp"
android:layout_marginTop="14dp"
android:visibility="gone" />
<LinearLayout
android:id="@+id/ll_no_items"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13.3dp"
android:layout_marginTop="28.3dp"
android:background="@drawable/bg_round_corner_4_7_13181b"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="28dp"
android:background="@drawable/bg_round_corner_16_263238"
android:gravity="center"
android:orientation="vertical"
android:paddingVertical="16.7dp"
android:paddingVertical="16dp"
android:visibility="gone">
<ImageView
@@ -73,12 +73,12 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginVertical="10dp"
android:fontFamily="@font/gmarket_sans_medium"
android:fontFamily="@font/pretendard_regular"
android:gravity="center"
android:text="마이페이지에서 본인인증을 하거나\n라이브를 예약하고 참여해보세요."
android:textColor="@color/color_bbbbbb"
android:textSize="13sp"
android:lineSpacingExtra="8dp"
android:text="마이페이지에서 본인인증을 하거나\n라이브를 예약하고 참여해보세요."
android:textColor="@color/white"
android:textSize="13sp"
tools:ignore="SmallSp" />
</LinearLayout>
@@ -86,8 +86,8 @@
android:id="@+id/ll_refresh"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="13.3dp"
android:layout_marginHorizontal="13.3dp"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="16dp"
android:background="@drawable/bg_round_corner_26_7_transparent_909090"
android:gravity="center"
android:paddingVertical="11dp">
@@ -102,7 +102,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:fontFamily="@font/gmarket_sans_medium"
android:fontFamily="@font/pretendard_regular"
android:text="새로고침"
android:textSize="14.7sp" />
</LinearLayout>

View File

@@ -6,84 +6,38 @@
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:paddingHorizontal="24dp">
<LinearLayout
android:id="@+id/ll_title_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="visible"
android:layout_centerVertical="true"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_title1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold"
android:text="추천 "
android:textColor="@color/color_eeeeee"
android:textSize="18.3sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold"
android:text="채널"
android:textColor="@color/color_3bb9f1"
android:textSize="18.3sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_title_2"
android:layout_width="match_parent"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold"
android:fontFamily="@font/pretendard_bold"
android:text="팔로잉 "
android:textColor="@color/color_eeeeee"
android:textSize="18.3sp" />
android:textColor="@color/color_3bb9f1"
android:textSize="26sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold"
android:fontFamily="@font/pretendard_bold"
android:text="채널"
android:textColor="@color/color_3bb9f1"
android:textSize="18.3sp" />
android:textColor="@color/white"
android:textSize="26sp" />
</LinearLayout>
<TextView
android:id="@+id/tv_following_channel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginEnd="6.7dp"
android:layout_toStartOf="@+id/iv_switch"
android:fontFamily="@font/gmarket_sans_medium"
android:text="팔로잉 채널"
android:textColor="@color/color_777777"
android:textSize="13.3sp" />
<ImageView
android:id="@+id/iv_switch"
android:layout_width="33.3dp"
android:layout_height="20dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:contentDescription="@null"
android:src="@drawable/btn_toggle_off_big" />
</RelativeLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_recommend_channel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="21.3dp" />
android:layout_marginTop="16dp"
android:clipToPadding="false"
android:paddingHorizontal="24dp" />
</LinearLayout>

View File

@@ -8,7 +8,7 @@
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingHorizontal="13.3dp">
android:layout_marginHorizontal="24dp">
<LinearLayout
android:layout_width="match_parent"
@@ -18,18 +18,18 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold"
android:text="지금 "
android:textColor="@color/color_eeeeee"
android:textSize="18.3sp" />
android:fontFamily="@font/pretendard_bold"
android:text="라이브 "
android:textColor="@color/color_3bb9f1"
android:textSize="26sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold"
android:fontFamily="@font/pretendard_bold"
android:text="예약중"
android:textColor="@color/color_3bb9f1"
android:textSize="18.3sp" />
android:textColor="@color/white"
android:textSize="26sp" />
</LinearLayout>
<TextView
@@ -38,27 +38,29 @@
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:fontFamily="@font/gmarket_sans_light"
android:fontFamily="@font/pretendard_regular"
android:text="전체보기"
android:textColor="@color/color_bbbbbb"
android:textSize="11.3sp" />
android:textColor="#78909C"
android:textSize="14sp" />
</RelativeLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_suda_reservation"
android:id="@+id/rv_live_reservation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="28.3dp"
android:layout_marginTop="14dp"
android:clipToPadding="false"
android:nestedScrollingEnabled="false"
android:paddingHorizontal="24dp"
android:visibility="gone" />
<LinearLayout
android:id="@+id/ll_no_items"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13.3dp"
android:layout_marginVertical="28.3dp"
android:background="@drawable/bg_round_corner_4_7_13181b"
android:layout_marginHorizontal="24dp"
android:layout_marginVertical="28dp"
android:background="@drawable/bg_round_corner_16_263238"
android:gravity="center"
android:orientation="vertical"
android:paddingVertical="16.7dp"
@@ -74,12 +76,12 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginVertical="10dp"
android:fontFamily="@font/gmarket_sans_medium"
android:fontFamily="@font/pretendard_regular"
android:gravity="center"
android:text="지금 예약중인 라이브가 없습니다.\n채널을 팔로잉 하고 라이브 알림을 받아 보세요."
android:textColor="@color/color_bbbbbb"
android:textSize="13sp"
android:lineSpacingExtra="8dp"
android:text="지금 예약중인 라이브가 없습니다.\n채널을 팔로잉 하고 라이브 알림을 받아 보세요."
android:textColor="@color/white"
android:textSize="13sp"
tools:ignore="SmallSp" />
</LinearLayout>
</LinearLayout>

View File

@@ -4,53 +4,15 @@
android:layout_height="wrap_content"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold"
android:text="추천 "
android:textColor="@color/color_ff5c49"
android:textSize="18.3sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold"
android:text="라이브"
android:textColor="@color/color_eeeeee"
android:textSize="18.3sp" />
</LinearLayout>
<ImageView
android:id="@+id/iv_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:contentDescription="@null"
android:src="@drawable/ic_message" />
</RelativeLayout>
<com.zhpan.bannerview.BannerViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="26.7dp" />
android:layout_height="wrap_content" />
<com.zhpan.indicator.IndicatorView
android:id="@+id/indicator2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="6.7dp" />
android:layout_marginTop="28dp" />
</LinearLayout>