diff --git a/app/src/main/java/kr/co/vividnext/sodalive/home/AuditionBannerAdapter.kt b/app/src/main/java/kr/co/vividnext/sodalive/home/AuditionBannerAdapter.kt new file mode 100644 index 00000000..1fbd7b48 --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/home/AuditionBannerAdapter.kt @@ -0,0 +1,54 @@ +package kr.co.vividnext.sodalive.home + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.widget.FrameLayout +import android.widget.ImageView +import com.bumptech.glide.Glide +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition +import com.zhpan.bannerview.BaseBannerAdapter +import com.zhpan.bannerview.BaseViewHolder +import kr.co.vividnext.sodalive.R +import kr.co.vividnext.sodalive.audition.GetAuditionListItem + +class AuditionBannerAdapter( + private val context: Context, + private val itemWidth: Int, + private val itemHeight: Int, + private val onClick: (Long) -> Unit +) : BaseBannerAdapter() { + override fun bindData( + holder: BaseViewHolder, + data: GetAuditionListItem, + position: Int, + pageSize: Int + ) { + val ivBanner = holder.findViewById(R.id.iv_recommend_live) + val layoutParams = ivBanner.layoutParams as FrameLayout.LayoutParams + + layoutParams.width = itemWidth + layoutParams.height = itemHeight + + Glide + .with(context) + .asBitmap() + .load(data.imageUrl) + .into(object : CustomTarget() { + override fun onResourceReady(resource: Bitmap, transition: Transition?) { + ivBanner.layoutParams = layoutParams + ivBanner.setImageBitmap(resource) + } + + override fun onLoadCleared(placeholder: Drawable?) { + } + }) + + ivBanner.setOnClickListener { onClick(data.id) } + } + + override fun getLayoutId(viewType: Int): Int { + return R.layout.item_recommend_live + } +} diff --git a/app/src/main/java/kr/co/vividnext/sodalive/home/HomeFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/home/HomeFragment.kt index dc4ed5cd..19a3f1a8 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/home/HomeFragment.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/home/HomeFragment.kt @@ -32,6 +32,7 @@ import kr.co.vividnext.sodalive.audio_content.main.banner.AudioContentMainBanner import kr.co.vividnext.sodalive.audio_content.player.AudioContentPlayerService import kr.co.vividnext.sodalive.audio_content.series.detail.SeriesDetailActivity import kr.co.vividnext.sodalive.audio_content.upload.AudioContentUploadActivity +import kr.co.vividnext.sodalive.audition.detail.AuditionDetailActivity import kr.co.vividnext.sodalive.base.BaseFragment import kr.co.vividnext.sodalive.common.Constants import kr.co.vividnext.sodalive.common.LoadingDialog @@ -69,6 +70,8 @@ class HomeFragment : BaseFragment(FragmentHomeBinding::infl private lateinit var contentBannerAdapter: AudioContentMainBannerAdapter private lateinit var originalSeriesAdapter: HomeSeriesAdapter + private lateinit var auditionAdapter: AuditionBannerAdapter + private val handler = Handler(Looper.getMainLooper()) private val preferenceChangeListener = @@ -158,6 +161,7 @@ class HomeFragment : BaseFragment(FragmentHomeBinding::infl setupLatestContent() setupContentBanner() setupOriginalSeries() + setupAudition() } private fun setupLiveView() { @@ -510,8 +514,8 @@ class HomeFragment : BaseFragment(FragmentHomeBinding::infl 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()) + .setIndicatorSliderWidth(10f.dpToPx().toInt(), 10f.dpToPx().toInt()) + .setIndicatorHeight(10f.dpToPx().toInt()) viewModel.eventBannerListLiveData.observe(viewLifecycleOwner) { if ( @@ -570,10 +574,12 @@ class HomeFragment : BaseFragment(FragmentHomeBinding::infl outRect.left = 0 outRect.right = 8f.dpToPx().toInt() } + originalSeriesAdapter.itemCount - 1 -> { outRect.left = 8f.dpToPx().toInt() outRect.right = 0 } + else -> { outRect.left = 8f.dpToPx().toInt() outRect.right = 8f.dpToPx().toInt() @@ -593,6 +599,63 @@ class HomeFragment : BaseFragment(FragmentHomeBinding::infl } } + private fun setupAudition() { + val layoutParams = binding + .eventBannerSlider + .layoutParams as LinearLayout.LayoutParams + + val pagerWidth = screenWidth.toDouble() + val pagerHeight = (pagerWidth * 120 / 352).roundToInt() + layoutParams.width = pagerWidth.roundToInt() + layoutParams.height = pagerHeight + + auditionAdapter = AuditionBannerAdapter( + requireContext(), + pagerWidth.roundToInt(), + pagerHeight + ) { + startActivity( + Intent(requireContext(), AuditionDetailActivity::class.java).apply { + putExtra(Constants.EXTRA_AUDITION_ID, it) + } + ) + } + + binding + .auditionSlider + .layoutParams = layoutParams + + binding.auditionSlider.apply { + adapter = auditionAdapter as BaseBannerAdapter + + setLifecycleRegistry(lifecycle) + setScrollDuration(1000) + setInterval(4 * 1000) + }.create() + + binding + .auditionSlider + .setIndicatorView(binding.indicatorAudition) + .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(10f.dpToPx().toInt(), 10f.dpToPx().toInt()) + .setIndicatorHeight(10f.dpToPx().toInt()) + + viewModel.auditionListLiveData.observe(viewLifecycleOwner) { + if (it.isNotEmpty()) { + binding.llAudition.visibility = View.VISIBLE + binding.auditionSlider.refreshData(it) + } else { + binding.llAudition.visibility = View.GONE + } + } + } + private fun bindData() { viewModel.isLoading.observe(viewLifecycleOwner) { if (it) { diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 298085c5..ecdafed1 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -184,7 +184,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" - android:layout_marginTop="6.7dp" /> + android:layout_marginTop="28dp" /> + android:layout_marginTop="28dp" />