Commit 118a34f7 authored by wanglei's avatar wanglei

...提交代码

parent 24bd4887
...@@ -112,6 +112,7 @@ dependencies { ...@@ -112,6 +112,7 @@ dependencies {
implementation("io.github.youth5201314:banner:2.2.3") implementation("io.github.youth5201314:banner:2.2.3")
implementation("com.github.angcyo.DslTablayout:TabLayout:3.6.4") implementation("com.github.angcyo.DslTablayout:TabLayout:3.6.4")
implementation("com.github.angcyo.DslTablayout:ViewPager2Delegate:3.6.4") implementation("com.github.angcyo.DslTablayout:ViewPager2Delegate:3.6.4")
implementation("io.github.litao0621:nifty-slider:2.0.2")
//firebase //firebase
implementation(platform("com.google.firebase:firebase-bom:32.3.1")) implementation(platform("com.google.firebase:firebase-bom:32.3.1"))
......
...@@ -12,6 +12,8 @@ import com.chad.library.adapter4.BaseQuickAdapter ...@@ -12,6 +12,8 @@ import com.chad.library.adapter4.BaseQuickAdapter
class EPAdapter : BaseQuickAdapter<ShortPlayEPBean, CommonViewHolder>() { class EPAdapter : BaseQuickAdapter<ShortPlayEPBean, CommonViewHolder>() {
var selectEp: ((ep: Int, lock: Boolean) -> Unit)? = null
override fun onBindViewHolder(holder: CommonViewHolder, position: Int, item: ShortPlayEPBean?) { override fun onBindViewHolder(holder: CommonViewHolder, position: Int, item: ShortPlayEPBean?) {
item ?: return item ?: return
val context = holder.itemView.context val context = holder.itemView.context
...@@ -24,6 +26,10 @@ class EPAdapter : BaseQuickAdapter<ShortPlayEPBean, CommonViewHolder>() { ...@@ -24,6 +26,10 @@ class EPAdapter : BaseQuickAdapter<ShortPlayEPBean, CommonViewHolder>() {
binding.ivPlay.visibility = View.GONE binding.ivPlay.visibility = View.GONE
binding.ivLock.isVisible = item.lock binding.ivLock.isVisible = item.lock
binding.tvEP.visibility = View.VISIBLE binding.tvEP.visibility = View.VISIBLE
binding.tvEP.text = item.ep.toString()
}
binding.root.setOnClickListener {
selectEp?.invoke(item.ep, item.lock)
} }
} }
......
...@@ -21,33 +21,36 @@ import com.chad.library.adapter4.BaseQuickAdapter ...@@ -21,33 +21,36 @@ import com.chad.library.adapter4.BaseQuickAdapter
import com.youth.banner.adapter.BannerAdapter import com.youth.banner.adapter.BannerAdapter
class BannerAdapter( class BannerAdapter : BaseQuickAdapter<List<ShortPlay>, CommonViewHolder>() {
val shortPlayList: List<ShortPlay>
) : BaseQuickAdapter<Any, CommonViewHolder>() {
private val TAG = "BannerAdapter" private val TAG = "BannerAdapter"
var paletteAction: ((colorInt: Int) -> Unit)? = null var paletteAction: ((colorInt: Int) -> Unit)? = null
var playAction: ((shortPlay: ShortPlay) -> Unit)? = null var playAction: ((shortPlay: ShortPlay) -> Unit)? = null
var binding: ItemBannerBinding? = null var binding: ItemBannerBinding? = null
override fun getItemCount(items: List<Any>): Int { override fun getItemCount(items: List<List<ShortPlay>>): Int {
return 1 return items.size
} }
override fun onBindViewHolder(holder: CommonViewHolder, position: Int, item: Any?) { override fun onBindViewHolder(holder: CommonViewHolder, position: Int, item: List<ShortPlay>?) {
item ?: return
binding = ItemBannerBinding.bind(holder.itemView) binding = ItemBannerBinding.bind(holder.itemView)
val context = holder.itemView.context val context = holder.itemView.context
LogEx.logDebug(TAG, "onBindViewHolder") LogEx.logDebug(TAG, "onBindViewHolder")
if (binding?.banner?.adapter == null) {
val innerAdapter = binding?.banner?.adapter as GalleryAdapter?
if (innerAdapter == null && item.isNotEmpty()) {
LogEx.logDebug(TAG, "onBindViewHolder banner") LogEx.logDebug(TAG, "onBindViewHolder banner")
binding?.banner?.setAdapter(GalleryAdapter(shortPlayList)) binding?.banner?.setAdapter(GalleryAdapter(item))
//添加画廊效果 //添加画廊效果
binding?.banner?.setBannerGalleryEffect( binding?.banner?.setBannerGalleryEffect(
context.resources.getDimensionPixelSize(R.dimen.dp_30), context.resources.getDimensionPixelSize(R.dimen.dp_30),
context.resources.getDimensionPixelSize(R.dimen.dp_10) context.resources.getDimensionPixelSize(R.dimen.dp_10)
) )
binding?.banner?.setIndicator(binding?.indicator, false) binding?.banner?.setIndicator(binding?.indicator, false)
} else {
innerAdapter?.setDatas(item)
} }
} }
......
...@@ -16,24 +16,24 @@ import com.chad.library.adapter4.BaseQuickAdapter ...@@ -16,24 +16,24 @@ import com.chad.library.adapter4.BaseQuickAdapter
*/ */
class ShortPlayColumnsAdapter( class ShortPlayColumnsAdapter(
val category: String = "", val category: String = "",
val shortList: List<ShortPlay> ) : BaseQuickAdapter<List<ShortPlay>, CommonViewHolder>() {
) : BaseQuickAdapter<Any, CommonViewHolder>() {
var itemClick: ((shortPlay: ShortPlay) -> Unit)? = null var itemClick: ((shortPlay: ShortPlay) -> Unit)? = null
override fun getItemCount(items: List<Any>): Int { override fun getItemCount(items: List<List<ShortPlay>>): Int {
return 1 return items.size
} }
override fun onBindViewHolder(holder: CommonViewHolder, position: Int, item: Any?) { override fun onBindViewHolder(holder: CommonViewHolder, position: Int, item: List<ShortPlay>?) {
item ?: return
val binding = ItemShortplayColumnsBinding.bind(holder.itemView) val binding = ItemShortplayColumnsBinding.bind(holder.itemView)
binding.tvCategory.text = category binding.tvCategory.text = category
if (binding.rv.adapter == null) { var innerAdapter = binding.rv.adapter as InnerShortPlayAdapter?
val adapter = InnerShortPlayAdapter() if (innerAdapter == null) {
binding.rv.adapter = adapter innerAdapter = InnerShortPlayAdapter()
adapter.submitList(shortList) binding.rv.adapter = innerAdapter
} }
innerAdapter.submitList(item)
} }
override fun onCreateViewHolder(context: Context, parent: ViewGroup, viewType: Int): CommonViewHolder { override fun onCreateViewHolder(context: Context, parent: ViewGroup, viewType: Int): CommonViewHolder {
......
...@@ -14,12 +14,12 @@ import com.base.appzxhy.ui.concatAdapter.BannerAdapter ...@@ -14,12 +14,12 @@ import com.base.appzxhy.ui.concatAdapter.BannerAdapter
import com.base.appzxhy.ui.concatAdapter.ShortPlayCategoryAdapter import com.base.appzxhy.ui.concatAdapter.ShortPlayCategoryAdapter
import com.base.appzxhy.ui.concatAdapter.ShortPlayColumnsAdapter import com.base.appzxhy.ui.concatAdapter.ShortPlayColumnsAdapter
import com.base.appzxhy.ui.play.PlayFullActivity import com.base.appzxhy.ui.play.PlayFullActivity
import com.base.appzxhy.ui.vm.ShortPlayViewModel
import com.base.appzxhy.utils.BarUtils import com.base.appzxhy.utils.BarUtils
import com.base.appzxhy.utils.LogEx import com.base.appzxhy.utils.LogEx
import com.base.appzxhy.utils.ToastUtils.toast import com.base.appzxhy.utils.ToastUtils.toast
import com.bytedance.sdk.shortplay.api.ShortPlay import com.bytedance.sdk.shortplay.api.ShortPlay
import com.google.gson.Gson import com.google.gson.Gson
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
...@@ -30,44 +30,38 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl ...@@ -30,44 +30,38 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
private var bannerAdapter: BannerAdapter? = null private var bannerAdapter: BannerAdapter? = null
private var columnsAdapter: ShortPlayColumnsAdapter? = null private var columnsAdapter: ShortPlayColumnsAdapter? = null
private val viewModel by lazy(LazyThreadSafetyMode.NONE) {
ViewModelProvider(this)[ShortPlayViewModel::class.java]
}
override fun initView() { override fun initView() {
super.initView() super.initView()
binding.root.updatePadding(top = BarUtils.getStatusBarHeight()) binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
contactAdapter = ConcatAdapter() contactAdapter = ConcatAdapter()
binding.rv.adapter = contactAdapter binding.rv.adapter = contactAdapter
initBannerAdapter()
lifecycleScope.launch { initBannerAdapter()
viewModel.homeCategoryFlow.collectLatest { id -> initNewShortAdapter()
when (id) { initCategoryAdapter()
0L -> initNewShortAdapter()
else -> initCategoryShortAdapter(listOf(id))
}
}
}
binding.rv.addOnScrollListener(object : RecyclerView.OnScrollListener() { binding.rv.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
if (recyclerView.computeVerticalScrollExtent() + recyclerView.computeVerticalScrollOffset() >= recyclerView.computeVerticalScrollRange()) { if (recyclerView.computeVerticalScrollExtent() + recyclerView.computeVerticalScrollOffset() >= recyclerView.computeVerticalScrollRange()) {
LogEx.logDebug(TAG, "loadMore") LogEx.logDebug(TAG, "loadMore")
viewModel.sendHomeCategoryFlow() val activity = requireActivity() as MainActivity?
activity?.viewModel?.getCategoryListFlow()
} }
} }
}) })
} }
private fun initCategoryShortAdapter(categoryIds: List<Long>) { private fun initCategoryAdapter() {
viewModel.getFeedListByCategoryIds(categoryIds, null) { list ->
if (list.size > 4) {
val activity = requireActivity() as MainActivity? val activity = requireActivity() as MainActivity?
activity?.runOnUiThread { lifecycleScope.launch {
val ids = categoryIds[0] activity?.viewModel?.categoryList?.collectLatest { list ->
val categoryTitle = viewModel.categoryTitle(requireContext(), ids) if (list.size > 4) {
var ids = 1L
kotlin.runCatching {
ids = list[0].categories[0].id
}
val categoryTitle = activity.viewModel.categoryTitle(requireContext(), ids)
val categoryAdapter = ShortPlayCategoryAdapter(categoryTitle, list) val categoryAdapter = ShortPlayCategoryAdapter(categoryTitle, list)
categoryAdapter.itemClick = ::shortPlayClick categoryAdapter.itemClick = ::shortPlayClick
categoryAdapter.categoryClick = { categoryAdapter.categoryClick = {
...@@ -80,11 +74,8 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl ...@@ -80,11 +74,8 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
} }
private fun initBannerAdapter() { private fun initBannerAdapter() {
viewModel.getPopularDrama { list ->
val activity = requireActivity() as MainActivity? val activity = requireActivity() as MainActivity?
activity?.runOnUiThread { bannerAdapter = BannerAdapter()
// LogEx.logDebug(TAG, "list=${list.size}")
bannerAdapter = BannerAdapter(list)
bannerAdapter?.let { bannerAdapter?.let {
it.paletteAction = { it.paletteAction = {
binding.root.setBackgroundColor(it) binding.root.setBackgroundColor(it)
...@@ -96,8 +87,12 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl ...@@ -96,8 +87,12 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
} }
contactAdapter?.addAdapter(0, it) contactAdapter?.addAdapter(0, it)
} }
}
lifecycleScope.launch(Dispatchers.Main) {
activity?.viewModel?.bannerList?.collectLatest { bannerList ->
LogEx.logDebug(TAG, "bannerList=${bannerList.size}")
bannerAdapter?.submitList(listOf(bannerList))
}
} }
} }
...@@ -105,9 +100,9 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl ...@@ -105,9 +100,9 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
override fun onResumeOneShoot() { override fun onResumeOneShoot() {
super.onResumeOneShoot() super.onResumeOneShoot()
binding.root.postDelayed({
bannerAdapter?.setBannerAutoLoop(true) val activity = requireActivity() as MainActivity?
}, 1500) activity?.viewModel?.getCategoryListFlow(true)
} }
override fun onResume() { override fun onResume() {
...@@ -120,15 +115,16 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl ...@@ -120,15 +115,16 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
} }
private fun initNewShortAdapter() { private fun initNewShortAdapter() {
viewModel.getNewDrama { list ->
if (list.size > 4) {
val activity = requireActivity() as MainActivity? val activity = requireActivity() as MainActivity?
activity?.runOnUiThread { columnsAdapter = ShortPlayColumnsAdapter("New Short")
columnsAdapter = ShortPlayColumnsAdapter("New Short", list)
columnsAdapter?.let { contactAdapter?.addAdapter(it) } columnsAdapter?.let { contactAdapter?.addAdapter(it) }
lifecycleScope.launch(Dispatchers.Main) {
activity?.viewModel?.newList?.collectLatest { list ->
if (list.size > 4) {
columnsAdapter?.submitList(listOf(list))
} }
} }
viewModel.sendHomeCategoryFlow()
} }
} }
......
...@@ -3,6 +3,8 @@ package com.base.appzxhy.ui.main ...@@ -3,6 +3,8 @@ package com.base.appzxhy.ui.main
import android.graphics.Color import android.graphics.Color
import android.view.LayoutInflater import android.view.LayoutInflater
import android.widget.TextView import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.NavController import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.NavHostFragment
import com.base.appzxhy.R import com.base.appzxhy.R
...@@ -10,6 +12,7 @@ import com.base.appzxhy.base.BaseActivity ...@@ -10,6 +12,7 @@ import com.base.appzxhy.base.BaseActivity
import com.base.appzxhy.bean.HomeTabUIBean import com.base.appzxhy.bean.HomeTabUIBean
import com.base.appzxhy.databinding.ActivityMainBinding import com.base.appzxhy.databinding.ActivityMainBinding
import com.base.appzxhy.databinding.ItemHomeTabBinding import com.base.appzxhy.databinding.ItemHomeTabBinding
import com.base.appzxhy.ui.vm.ShortPlayViewModel
import com.base.appzxhy.utils.LogEx import com.base.appzxhy.utils.LogEx
import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayout.OnTabSelectedListener import com.google.android.material.tabs.TabLayout.OnTabSelectedListener
...@@ -27,11 +30,28 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl ...@@ -27,11 +30,28 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
HomeTabUIBean(R.drawable.bg_selector_profile, "Profile"), HomeTabUIBean(R.drawable.bg_selector_profile, "Profile"),
) )
} }
val viewModel by lazy(LazyThreadSafetyMode.NONE) {
ViewModelProvider(this)[ShortPlayViewModel::class.java]
}
override fun initView() { override fun initView() {
super.initView() super.initView()
navController = (supportFragmentManager.findFragmentById(R.id.fragment_container) as NavHostFragment).navController navController = (supportFragmentManager.findFragmentById(R.id.fragment_container) as NavHostFragment).navController
navController.addOnDestinationChangedListener { controller, destination, arguments ->
LogEx.logDebug(TAG, "addOnDestinationChangedListener")
if (destination.id == R.id.homeFragment) {
LogEx.logDebug(TAG, "addOnDestinationChangedListener homeFragment")
}
}
initTab() initTab()
viewModel.getPopularDrama()
viewModel.getNewDrama()
} }
private fun initTab() { private fun initTab() {
...@@ -68,15 +88,38 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl ...@@ -68,15 +88,38 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
private fun naviFragment(id: Int) { private fun naviFragment(id: Int) {
when (id) { when (id) {
0 -> { 0 -> {
if (navController.currentDestination?.id != R.id.homeFragment) {
navController.navigate(R.id.homeFragment)
}
} }
1 -> { 1 -> {
navController.navigate(R.id.playSlideFragment)
} }
2 -> { 2 -> {
navController.navigate(R.id.myListFragment)
} }
3 -> {
navController.navigate(R.id.rewardsFragment)
}
4 -> {
navController.navigate(R.id.profileFragment)
}
}
}
private fun showFragment(targetFragment: Fragment) {
val transaction = supportFragmentManager.beginTransaction()
// 隐藏所有Fragment
for (fragment in supportFragmentManager.fragments) {
transaction.hide(fragment)
} }
// 显示当前需要显示的Fragment
transaction.show(targetFragment)
transaction.commit()
} }
fun TabLayout.Tab.setUnselected() { fun TabLayout.Tab.setUnselected() {
......
package com.base.appzxhy.ui.main
import com.base.appzxhy.base.BaseFragment
import com.base.appzxhy.databinding.FragmentMyListBinding
class MyListFragment : BaseFragment<FragmentMyListBinding>(FragmentMyListBinding::inflate) {
}
\ No newline at end of file
package com.base.appzxhy.ui.main
import com.base.appzxhy.base.BaseFragment
import com.base.appzxhy.databinding.FragmentPlaySlideBinding
class PlaySlideFragment : BaseFragment<FragmentPlaySlideBinding>(FragmentPlaySlideBinding::inflate) {
override fun initView() {
super.initView()
}
override fun initListener() {
super.initListener()
}
}
\ No newline at end of file
package com.base.appzxhy.ui.main
import com.base.appzxhy.base.BaseFragment
import com.base.appzxhy.databinding.FragmentProfileBinding
class ProfileFragment : BaseFragment<FragmentProfileBinding>(FragmentProfileBinding::inflate) {
}
\ No newline at end of file
package com.base.appzxhy.ui.main
import com.base.appzxhy.base.BaseFragment
import com.base.appzxhy.databinding.FragmentRewardsBinding
class RewardsFragment : BaseFragment<FragmentRewardsBinding>(FragmentRewardsBinding::inflate) {
}
\ No newline at end of file
package com.base.appzxhy.ui.play
import android.content.Context
import android.util.AttributeSet
import android.widget.FrameLayout
import com.base.appzxhy.R
import com.base.appzxhy.databinding.LayoutOverlayForyouBinding
import com.bytedance.sdk.shortplay.api.PSSDK
import com.bytedance.sdk.shortplay.api.ShortPlay
import com.bytedance.sdk.shortplay.api.ShortPlayFragment
/**
* 自定义播放页面悬浮成
*/
class CustomOverlayView : FrameLayout, PSSDK.IControlView {
private var layout: Int = 0
constructor(context: Context, layout: Int) : super(context) {
this.layout = layout
inflate(context, layout, this)
}
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
override fun getControlViewType(): PSSDK.ControlViewType {
return PSSDK.ControlViewType.CUSTOM
}
override fun bindItemData(shortPlayFragment: ShortPlayFragment?, shortPlay: ShortPlay, index: Int) {
when (layout) {
R.layout.layout_overlay_foryou -> {
val binding = LayoutOverlayForyouBinding.bind(this)
binding.tvTitle.text = shortPlay.title
binding.tvDesc.text = shortPlay.desc
}
}
}
}
\ No newline at end of file
package com.base.appzxhy.ui.play
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.Drawable
import android.view.Gravity
import androidx.appcompat.widget.AppCompatTextView
import androidx.core.content.ContextCompat
import com.base.appzxhy.R
import com.bytedance.sdk.shortplay.api.PSSDK
import com.bytedance.sdk.shortplay.api.ShortPlay
import com.bytedance.sdk.shortplay.api.ShortPlayFragment
class CustomShareView : AppCompatTextView, PSSDK.IControlView {
private val TAG = "CustomShareView"
private var shareDrawable: Drawable?
constructor(context: Context) : super(context) {
gravity = Gravity.CENTER_HORIZONTAL
setTextColor(Color.parseColor("#ffffff"))
textSize = 12f
shareDrawable = ContextCompat.getDrawable(context, R.mipmap.fy_share)
val size = resources.getDimensionPixelSize(R.dimen.dp_32)
shareDrawable?.setBounds(0, 0, size, size)
setCompoundDrawables(null, shareDrawable, null, null)
}
override fun getControlViewType(): PSSDK.ControlViewType {
return PSSDK.ControlViewType.Share
}
override fun bindItemData(fragment: ShortPlayFragment?, shortPlay: ShortPlay, index: Int) {
}
}
\ No newline at end of file
...@@ -8,19 +8,15 @@ import android.view.Gravity ...@@ -8,19 +8,15 @@ import android.view.Gravity
import androidx.appcompat.widget.AppCompatTextView import androidx.appcompat.widget.AppCompatTextView
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import com.base.appzxhy.R import com.base.appzxhy.R
import com.base.appzxhy.utils.LogEx
import com.bytedance.sdk.shortplay.api.PSSDK import com.bytedance.sdk.shortplay.api.PSSDK
import com.bytedance.sdk.shortplay.api.PSSDK.ControlStatus
import com.bytedance.sdk.shortplay.api.PSSDK.IControlStatusView
import com.bytedance.sdk.shortplay.api.ShortPlay import com.bytedance.sdk.shortplay.api.ShortPlay
import com.bytedance.sdk.shortplay.api.ShortPlayFragment import com.bytedance.sdk.shortplay.api.ShortPlayFragment
class CustomView : AppCompatTextView, IControlStatusView { class CustomView : AppCompatTextView, PSSDK.IControlView {
private val TAG = "CustomEPView" private val TAG = "CustomEPView"
private var drawable: Drawable? private var drawable: Drawable?
private var status = ControlStatus.Normal
constructor(context: Context, drawableRes: Int) : super(context) { constructor(context: Context, drawableRes: Int) : super(context) {
gravity = Gravity.CENTER_HORIZONTAL gravity = Gravity.CENTER_HORIZONTAL
...@@ -42,18 +38,5 @@ class CustomView : AppCompatTextView, IControlStatusView { ...@@ -42,18 +38,5 @@ class CustomView : AppCompatTextView, IControlStatusView {
override fun bindItemData(fragment: ShortPlayFragment?, shortPlay: ShortPlay, index: Int) { override fun bindItemData(fragment: ShortPlayFragment?, shortPlay: ShortPlay, index: Int) {
} }
@SuppressLint("SetTextI18n")
override fun setCurrentStatus(shortPlay: ShortPlay, index: Int, status: ControlStatus, extraInfo: PSSDK.StatusExtraInfo) {
this.status = status
LogEx.logDebug(TAG, "setCurrentStatus status=$status")
}
override fun getCurrentStatus(shortPlay: ShortPlay, index: Int): ControlStatus {
return status
}
override fun onClicked(shortPlay: ShortPlay, index: Int, status: ControlStatus): ControlStatus {
return ControlStatus.Normal
}
} }
\ No newline at end of file
package com.base.appzxhy.ui.play package com.base.appzxhy.ui.play
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Intent
import android.view.Gravity import android.view.Gravity
import android.view.View import android.view.View
import android.widget.FrameLayout import android.widget.FrameLayout
...@@ -8,6 +9,8 @@ import com.base.appzxhy.R ...@@ -8,6 +9,8 @@ import com.base.appzxhy.R
import com.base.appzxhy.base.BaseActivity import com.base.appzxhy.base.BaseActivity
import com.base.appzxhy.databinding.ActivityPlayFullBinding import com.base.appzxhy.databinding.ActivityPlayFullBinding
import com.base.appzxhy.shortplay.PlayHistoryHelper import com.base.appzxhy.shortplay.PlayHistoryHelper
import com.base.appzxhy.ui.views.DialogSelectEP
import com.base.appzxhy.ui.views.ShortPlayEPDialog.showShortPlayEPDialog
import com.base.appzxhy.utils.LogEx import com.base.appzxhy.utils.LogEx
import com.base.appzxhy.utils.ToastUtils.toast import com.base.appzxhy.utils.ToastUtils.toast
import com.bytedance.sdk.shortplay.api.PSSDK import com.bytedance.sdk.shortplay.api.PSSDK
...@@ -25,7 +28,7 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB ...@@ -25,7 +28,7 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
private var detailFragment: ShortPlayFragment? = null private var detailFragment: ShortPlayFragment? = null
private val startFromIndex = 1//剧集下标 private var startFromIndex = 1//剧集下标
private val startFromSeconds = 0//开始秒数 private val startFromSeconds = 0//开始秒数
private val playHistory: PlayHistoryHelper.PlayHistory = PlayHistoryHelper.PlayHistory() private val playHistory: PlayHistoryHelper.PlayHistory = PlayHistoryHelper.PlayHistory()
...@@ -91,7 +94,9 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB ...@@ -91,7 +94,9 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
}) })
builder.progressBarMarginToBottom(10) builder.progressBarMarginToBottom(10)
builder.enableImmersiveMode(1500) builder.enableImmersiveMode(5000)
builder.enableAutoPlayNext(true)
builder.displayProgressBar(false)
detailFragment = PSSDK.createDetailFragment(shortPlay, builder.build(), object : PSSDK.ShortPlayDetailPageListener { detailFragment = PSSDK.createDetailFragment(shortPlay, builder.build(), object : PSSDK.ShortPlayDetailPageListener {
...@@ -177,21 +182,34 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB ...@@ -177,21 +182,34 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
customCollectView.setLayoutParams(collectParams) customCollectView.setLayoutParams(collectParams)
views.add(customCollectView) views.add(customCollectView)
//选集 //选集,测试过无法触发点击事件
val customPEView = CustomView(applicationContext, R.mipmap.fy_list) val customPEView = CustomView(applicationContext, R.mipmap.fy_list)
customPEView.text = resources.getString(R.string.list) customPEView.text = resources.getString(R.string.list)
val peParams = val peParams =
FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT).apply { FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT).apply {
gravity = Gravity.BOTTOM or Gravity.RIGHT gravity = Gravity.BOTTOM or Gravity.RIGHT
bottomMargin = aLLBottomMargin + itemMargin bottomMargin = aLLBottomMargin + itemMargin * 1
rightMargin = this@PlayFullActivity.resources.getDimensionPixelSize(R.dimen.dp_18) rightMargin = this@PlayFullActivity.resources.getDimensionPixelSize(R.dimen.dp_18)
} }
customPEView.setLayoutParams(peParams) customPEView.setLayoutParams(peParams)
views.add(customPEView) views.add(customPEView)
customPEView.setOnClickListener {
detailFragment?.pausePlay()
showShortPlayEPDialog(shortPlay.total, startFromIndex, 5, object : DialogSelectEP {
override fun dismissAction() {
detailFragment?.startPlay()
}
override fun selectEPAction(ep: Int) {
super.selectEPAction(ep)
startFromIndex = ep
detailFragment?.startPlayIndex(startFromIndex)
}
})
}
//分享 //分享
val customShareView = CustomView(applicationContext, R.mipmap.fy_share) val customShareView = CustomShareView(applicationContext)
customShareView.text = resources.getString(R.string.share) customShareView.text = resources.getString(R.string.share)
val shareParams = val shareParams =
FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT).apply { FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT).apply {
...@@ -201,6 +219,19 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB ...@@ -201,6 +219,19 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
} }
customShareView.setLayoutParams(shareParams) customShareView.setLayoutParams(shareParams)
views.add(customShareView) views.add(customShareView)
customShareView.setOnClickListener {
val intent = Intent(Intent.ACTION_SEND)
intent.setType("text/plain")
intent.putExtra(Intent.EXTRA_SUBJECT, shortPlay.title)
intent.putExtra(Intent.EXTRA_TEXT, shortPlay.desc)
startActivity(Intent.createChooser(intent, "分享短剧"))
}
//控制按钮
val playControlView = CustomOverlayView(this@PlayFullActivity, R.layout.layout_overlay_player)
playControlView.layoutParams =
FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)
views.add(playControlView)
return views return views
} }
......
package com.base.appzxhy.ui.views package com.base.appzxhy.ui.views
import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.widget.TextView
import androidx.core.content.ContextCompat
import com.base.appzxhy.R import com.base.appzxhy.R
import com.base.appzxhy.bean.ShortPlayEPBean import com.base.appzxhy.bean.ShortPlayEPBean
import com.base.appzxhy.databinding.DialogEpListBinding import com.base.appzxhy.databinding.DialogEpListBinding
import com.base.appzxhy.ui.adapter.EPAdapter
import com.base.appzxhy.utils.XmlEx.inflate
import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialog
interface DialogSelectEP {
open fun dismissAction() {}
open fun selectEPAction(ep: Int) {}
}
object ShortPlayEPDialog { object ShortPlayEPDialog {
fun Context.showShortPlayEPDialog(totalEp: Int, lockEp: Int, playEp: Int) { @SuppressLint("SetTextI18n")
fun Context.showShortPlayEPDialog(
totalEp: Int,
playEp: Int,
lockEp: Int = 9,
callBack: DialogSelectEP
) {
val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog) val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
val binding = DialogEpListBinding.inflate(LayoutInflater.from(this)) val binding = DialogEpListBinding.inflate(LayoutInflater.from(this))
dialog.setContentView(binding.root) dialog.setContentView(binding.root)
dialog.setCanceledOnTouchOutside(false) dialog.setCanceledOnTouchOutside(true)
dialog.show() dialog.show()
...@@ -24,30 +41,44 @@ object ShortPlayEPDialog { ...@@ -24,30 +41,44 @@ object ShortPlayEPDialog {
//展开 //展开
behavior.state = BottomSheetBehavior.STATE_EXPANDED behavior.state = BottomSheetBehavior.STATE_EXPANDED
val textLength = resources.getDimensionPixelOffset(R.dimen.dp_5)
val list = ArrayList<ShortPlayEPBean>() val list = ArrayList<ShortPlayEPBean>()
repeat(totalEp) { i -> repeat(totalEp) { i ->
val ep = i + 1 val ep = i + 1
val lock = ep >= lockEp val lock = ep >= lockEp
val isPlay = ep == playEp val isPlay = ep == playEp
val bean = ShortPlayEPBean(ep, lock, isPlay) val bean = ShortPlayEPBean(ep, lock, isPlay)
list.add(bean) list.add(bean)
} }
val splitLists = list.chunked(50)
splitLists.forEach {
val view = R.layout.item_ep_tab.inflate(this)
view.findViewById<TextView>(R.id.tv).text = "${it.first().ep} - ${it.last().ep}"
binding.dslTabLayout.addView(view)
}
binding.dslTabLayout.tabIndicator.indicatorDrawable =
ContextCompat.getDrawable(this, R.drawable.indicator_bottom_line_ff3d71)
binding.dslTabLayout.tabIndicator.indicatorEnableFlow = true
binding.dslTabLayout.tabIndicator.ignoreChildPadding = true
binding.dslTabLayout.tabIndicator.indicatorWidth = resources.getDimensionPixelSize(R.dimen.dp_28)
binding.dslTabLayout.tabIndicator.indicatorHeight = resources.getDimensionPixelSize(R.dimen.dp_2)
val adapter = EPAdapter()
binding.rv.adapter = adapter
adapter.selectEp = { ep, lock ->
dialog.dismiss()
callBack.selectEPAction(ep)
}
// binding.dslTabLayout.tabIndicator.indicatorDrawable = binding.dslTabLayout.configTabLayoutConfig {
// ContextCompat.getDrawable(this, R.drawable.indicator_bottom_line_ff3d71) onSelectIndexChange = { fromIndex, selectIndexList, reselect, fromUser ->
// binding.dslTabLayout.tabIndicator.indicatorEnableFlow = true val toIndex = selectIndexList.first()
// binding.dslTabLayout.tabIndicator.ignoreChildPadding = true val epList = splitLists[toIndex]
// adapter.submitList(epList)
// binding.dslTabLayout.configTabLayoutConfig { }
// onSelectIndexChange = { fromIndex, selectIndexList, reselect, fromUser -> }
// val toIndex = selectIndexList.first()
// binding.dslTabLayout.tabIndicator.indicatorWidth = tab.length * textLength
// }
// }
dialog.setOnDismissListener {
callBack.dismissAction()
}
} }
} }
\ No newline at end of file
package com.base.appzxhy.ui.views
import android.app.AlertDialog
import android.content.Context
import android.view.Gravity
import android.view.LayoutInflater
import com.base.appzxhy.databinding.DialogPlayQualityBinding
object ShortPlayQualityDialog {
fun Context.showShortPlayQualityDialog() {
val dialog = AlertDialog.Builder(this).create()
val binding = DialogPlayQualityBinding.inflate(LayoutInflater.from(this))
dialog.setView(binding.root)
dialog.setCanceledOnTouchOutside(false)
dialog.show()
val params = dialog.window?.attributes
// params?.width = resources.getDimensionPixelOffset(R.dimen.dp_320)
// params?.height = resources.getDimensionPixelOffset(R.dimen.dp_400)
params?.gravity = Gravity.CENTER
// params?.y = 50
}
}
\ No newline at end of file
...@@ -2,6 +2,7 @@ package com.base.appzxhy.ui.vm ...@@ -2,6 +2,7 @@ package com.base.appzxhy.ui.vm
import android.content.Context import android.content.Context
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelStore
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.base.appzxhy.R import com.base.appzxhy.R
import com.base.appzxhy.utils.LogEx import com.base.appzxhy.utils.LogEx
...@@ -9,6 +10,7 @@ import com.bytedance.sdk.shortplay.api.PSSDK ...@@ -9,6 +10,7 @@ import com.bytedance.sdk.shortplay.api.PSSDK
import com.bytedance.sdk.shortplay.api.PSSDK.FeedListLoadResult import com.bytedance.sdk.shortplay.api.PSSDK.FeedListLoadResult
import com.bytedance.sdk.shortplay.api.PSSDK.FeedListResultListener import com.bytedance.sdk.shortplay.api.PSSDK.FeedListResultListener
import com.bytedance.sdk.shortplay.api.ShortPlay import com.bytedance.sdk.shortplay.api.ShortPlay
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.util.concurrent.atomic.AtomicBoolean import java.util.concurrent.atomic.AtomicBoolean
...@@ -17,6 +19,10 @@ class ShortPlayViewModel : ViewModel() { ...@@ -17,6 +19,10 @@ class ShortPlayViewModel : ViewModel() {
private val TAG = "ShortPlayViewModel" private val TAG = "ShortPlayViewModel"
val bannerList = MutableStateFlow<List<ShortPlay>>(listOf())
var newList = MutableStateFlow<List<ShortPlay>>(listOf())
var categoryList = MutableStateFlow<List<ShortPlay>>(listOf())
companion object { companion object {
const val CATEGORY_MALE_ID = 1L//男频 const val CATEGORY_MALE_ID = 1L//男频
...@@ -33,13 +39,8 @@ class ShortPlayViewModel : ViewModel() { ...@@ -33,13 +39,8 @@ class ShortPlayViewModel : ViewModel() {
const val CATEGORY_ACTION_ID = 12L//动作 const val CATEGORY_ACTION_ID = 12L//动作
const val CATEGORY_ACG_ID = 13L//二次元 const val CATEGORY_ACG_ID = 13L//二次元
const val CATEGORY_OTHERS_ID = 14L//其他 const val CATEGORY_OTHERS_ID = 14L//其他
}
private val categoryLoading = AtomicBoolean(false) private val tempCategoryList = listOf(
var homeCategoryFlow = MutableStateFlow(-1L)
private val homeCategoryList =
arrayListOf(
0,
CATEGORY_CITY_ID, CATEGORY_CITY_ID,
CATEGORY_MODERN_ID, CATEGORY_MODERN_ID,
CATEGORY_COMEDY_ID, CATEGORY_COMEDY_ID,
...@@ -53,37 +54,58 @@ class ShortPlayViewModel : ViewModel() { ...@@ -53,37 +54,58 @@ class ShortPlayViewModel : ViewModel() {
CATEGORY_ACG_ID, CATEGORY_ACG_ID,
CATEGORY_OTHERS_ID CATEGORY_OTHERS_ID
) )
}
private val categoryLoading = AtomicBoolean(false)
private val homeCategoryList = ArrayList<Long>().apply {
addAll(tempCategoryList)
}
fun sendHomeCategoryFlow() { fun getCategoryListFlow(
if (homeCategoryList.isEmpty()) return reload: Boolean = false,
if (categoryLoading.get()) return count: Int = 12,
) {
if (reload) {
homeCategoryList.addAll(tempCategoryList)
}
if (homeCategoryList.isNotEmpty()) {
val nextCategory = homeCategoryList[0] val nextCategory = homeCategoryList[0]
homeCategoryList.removeAt(0) homeCategoryList.removeAt(0)
LogEx.logDebug(TAG, "nextCategory=$nextCategory")
viewModelScope.launch { PSSDK.requestFeedListByCategoryIds(listOf(nextCategory), null, 1, count, object : FeedListResultListener {
homeCategoryFlow.emit(nextCategory) override fun onFail(errorInfo: PSSDK.ErrorInfo?) {
LogEx.logDebug(TAG, "requestFeedListByCategoryIds ${errorInfo?.msg} ${errorInfo?.code}")
getCategoryListFlow(false)
}
override fun onSuccess(result: FeedListLoadResult<ShortPlay>?) {
viewModelScope.launch(Dispatchers.IO) {
result?.dataList?.let { categoryList.emit(it) }
}
} }
})
} }
}
/** /**
* 获取热门短剧列表 * 获取热门短剧列表
*/ */
fun getPopularDrama( fun getPopularDrama(
count: Int = 10, count: Int = 10,
uiAction: (list: List<ShortPlay>) -> Unit
) { ) {
PSSDK.requestPopularDrama(1, count, object : FeedListResultListener { PSSDK.requestPopularDrama(1, count, object : FeedListResultListener {
override fun onFail(errorInfo: PSSDK.ErrorInfo?) { override fun onFail(errorInfo: PSSDK.ErrorInfo?) {
LogEx.logDebug(TAG, "requestPopularDrama ${errorInfo?.msg} ${errorInfo?.code}") LogEx.logDebug(TAG, "requestPopularDrama ${errorInfo?.msg} ${errorInfo?.code}")
} }
override fun onSuccess(result: FeedListLoadResult<ShortPlay>?) { override fun onSuccess(result: FeedListLoadResult<ShortPlay>?) {
// LogEx.logDebug(TAG, "hasMore=${result?.hasMore}") result?.dataList?.let {
// LogEx.logDebug(TAG, "fromCache=${result?.fromCache}") viewModelScope.launch { bannerList.emit(it) }
// LogEx.logDebug(TAG, "dataList=${result?.dataList?.size}") }
result?.dataList?.let { uiAction.invoke(it) }
} }
}) })
} }
...@@ -93,7 +115,6 @@ class ShortPlayViewModel : ViewModel() { ...@@ -93,7 +115,6 @@ class ShortPlayViewModel : ViewModel() {
*/ */
fun getNewDrama( fun getNewDrama(
count: Int = 12, count: Int = 12,
uiAction: (list: List<ShortPlay>) -> Unit
) { ) {
PSSDK.requestNewDrama(1, count, object : FeedListResultListener { PSSDK.requestNewDrama(1, count, object : FeedListResultListener {
override fun onFail(errorInfo: PSSDK.ErrorInfo?) { override fun onFail(errorInfo: PSSDK.ErrorInfo?) {
...@@ -102,7 +123,9 @@ class ShortPlayViewModel : ViewModel() { ...@@ -102,7 +123,9 @@ class ShortPlayViewModel : ViewModel() {
override fun onSuccess(result: FeedListLoadResult<ShortPlay>?) { override fun onSuccess(result: FeedListLoadResult<ShortPlay>?) {
LogEx.logDebug(TAG, "dataList=${result?.dataList?.size}") LogEx.logDebug(TAG, "dataList=${result?.dataList?.size}")
result?.dataList?.let { uiAction.invoke(it) } result?.dataList?.let {
viewModelScope.launch { newList.emit(it) }
}
} }
}) })
} }
...@@ -151,6 +174,7 @@ class ShortPlayViewModel : ViewModel() { ...@@ -151,6 +174,7 @@ class ShortPlayViewModel : ViewModel() {
} }
} }
/** /**
* 获取分类标签接口 * 获取分类标签接口
*/ */
......
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FF3D71"/>
<corners android:radius="10dp"/>
</shape>
\ No newline at end of file
...@@ -3,11 +3,11 @@ ...@@ -3,11 +3,11 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="336dp">
<ImageView <ImageView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="336dp"
android:background="@mipmap/fy_bg" android:background="@mipmap/fy_bg"
android:minHeight="336dp" android:minHeight="336dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
...@@ -31,8 +31,10 @@ ...@@ -31,8 +31,10 @@
android:id="@+id/dslTabLayout" android:id="@+id/dslTabLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="30dp" android:layout_height="30dp"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
app:layout_constraintTop_toBottomOf="@id/tv" app:layout_constraintTop_toBottomOf="@id/tv"
app:tab_default_index="0"
app:tab_indicator_height="2dp"> app:tab_indicator_height="2dp">
</com.angcyo.tablayout.DslTabLayout> </com.angcyo.tablayout.DslTabLayout>
...@@ -41,12 +43,16 @@ ...@@ -41,12 +43,16 @@
android:id="@+id/v" android:id="@+id/v"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1dp" android:layout_height="1dp"
android:layout_marginTop="5dp"
android:background="@color/white" android:background="@color/white"
app:layout_constraintTop_toBottomOf="@id/dslTabLayout" /> app:layout_constraintTop_toBottomOf="@id/dslTabLayout" />
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv" android:id="@+id/rv"
android:layout_width="0dp" android:layout_marginBottom="20dp"
android:layout_marginTop="16dp"
android:layout_marginHorizontal="12dp"
android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:orientation="vertical" android:orientation="vertical"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
......
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?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="match_parent"
android:background="@color/black"
tools:context=".ui.main.MyListFragment">
<com.angcyo.tablayout.DslTabLayout
android:id="@+id/dslTabLayout"
android:layout_width="250dp"
android:layout_height="50dp"
android:layout_marginTop="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</com.angcyo.tablayout.DslTabLayout>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
android:src="@mipmap/my_bianji_n"
app:layout_constraintBottom_toBottomOf="@id/dslTabLayout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/dslTabLayout">
<ImageView
android:id="@+id/ivIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/my_bianji_n"
tools:ignore="ContentDescription" />
</FrameLayout>
<LinearLayout
android:id="@+id/llEmpty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
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_gravity="center_horizontal"
android:src="@mipmap/mylistwushuju"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/nothing_here_yet_add_something"
android:textColor="#B3FFFFFF"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/btnDiscover"
android:layout_width="250dp"
android:layout_height="50dp"
android:layout_marginTop="52dp"
android:background="@drawable/bg_ff3d71_10"
android:gravity="center"
android:text="@string/discover_more"
android:textColor="@color/white"
android:textSize="18sp"
android:textStyle="bold" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.main.PlaySlideFragment">
</FrameLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.main.ProfileFragment">
<!-- TODO: Update blank fragment layout -->
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/hello_blank_fragment" />
</FrameLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.main.RewardsFragment">
<!-- TODO: Update blank fragment layout -->
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/hello_blank_fragment" />
</FrameLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="0dp" android:layout_width="match_parent"
android:layout_height="46dp" android:layout_height="46dp"
android:layout_columnWeight="1" android:layout_columnWeight="1"
android:layout_margin="4dp" android:layout_margin="4dp"
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
android:id="@+id/tvEP" android:id="@+id/tvEP"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center" android:gravity="center"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="16sp" /> android:textSize="16sp" />
...@@ -25,10 +26,10 @@ ...@@ -25,10 +26,10 @@
<ImageView <ImageView
android:id="@+id/ivLock" android:id="@+id/ivLock"
android:layout_gravity="end|top"
android:src="@mipmap/fy_suo"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="end|top"
android:src="@mipmap/fy_suo"
tools:ignore="ContentDescription" /> tools:ignore="ContentDescription" />
</FrameLayout> </FrameLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingHorizontal="8dp"
android:paddingVertical="2dp"
android:text="1 - 50"
android:textColor="@color/white"
android:textSize="14sp"
android:textStyle="bold"
tools:ignore="HardcodedText">
</TextView>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:background="#99000000">
<LinearLayout
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_gravity="bottom|start"
android:layout_marginStart="16dp"
android:layout_marginBottom="65dp"
android:orientation="vertical"
tools:ignore="UselessParent">
<TextView
android:id="@+id/tvTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="17sp"
android:textStyle="bold"
tools:text="Genius Baby Gets Daddy Back" />
<TextView
android:id="@+id/tvDesc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:ellipsize="end"
android:maxLines="2"
android:textColor="@color/white"
android:textSize="13sp"
tools:text="Afler a medical mishap, the virgin Violet Gray becomes pregnant wit... More" />
<LinearLayout
android:id="@+id/llBtn"
android:layout_width="match_parent"
android:layout_height="38dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="16dp"
android:background="@drawable/bg_ff3d71_10"
android:gravity="center"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:src="@mipmap/fy_poly"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="Watch Now"
android:textColor="@color/white"
android:textSize="15sp"
tools:ignore="HardcodedText" />
</LinearLayout>
</LinearLayout>
</FrameLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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="match_parent"
tools:background="#99000000">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginBottom="60dp">
<!-- <TextView-->
<!-- android:id="@+id/tvPlaySecond"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content" />-->
</androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>
\ No newline at end of file
...@@ -10,4 +10,24 @@ ...@@ -10,4 +10,24 @@
android:name="com.base.appzxhy.ui.main.HomeFragment" android:name="com.base.appzxhy.ui.main.HomeFragment"
android:label="fragment_home" android:label="fragment_home"
tools:layout="@layout/fragment_home" /> tools:layout="@layout/fragment_home" />
<fragment
android:id="@+id/myListFragment"
android:name="com.base.appzxhy.ui.main.MyListFragment"
android:label="fragment_my_list"
tools:layout="@layout/fragment_my_list" />
<fragment
android:id="@+id/playSlideFragment"
android:name="com.base.appzxhy.ui.main.PlaySlideFragment"
android:label="fragment_play_slide"
tools:layout="@layout/fragment_play_slide" />
<fragment
android:id="@+id/rewardsFragment"
android:name="com.base.appzxhy.ui.main.RewardsFragment"
android:label="fragment_rewards"
tools:layout="@layout/fragment_rewards" />
<fragment
android:id="@+id/profileFragment"
android:name="com.base.appzxhy.ui.main.ProfileFragment"
android:label="fragment_profile"
tools:layout="@layout/fragment_profile" />
</navigation> </navigation>
\ No newline at end of file
...@@ -28,4 +28,5 @@ ...@@ -28,4 +28,5 @@
<dimen name="dp_310">310dp</dimen> <dimen name="dp_310">310dp</dimen>
<dimen name="dp_330">330dp</dimen> <dimen name="dp_330">330dp</dimen>
<dimen name="dp_70">70dp</dimen> <dimen name="dp_70">70dp</dimen>
<dimen name="dp_28">28dp</dimen>
</resources> </resources>
\ No newline at end of file
...@@ -28,5 +28,7 @@ ...@@ -28,5 +28,7 @@
<string name="others">Others</string> <string name="others">Others</string>
<string name="share">Share</string> <string name="share">Share</string>
<string name="list">List</string> <string name="list">List</string>
<string name="discover_more">Discover More</string>
<string name="nothing_here_yet_add_something">Nothing here yet - Add something!</string>
</resources> </resources>
\ No newline at end of file
...@@ -15,6 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 ...@@ -15,6 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
# Android operating system, and which are packaged with your app's APK # Android operating system, and which are packaged with your app's APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn # https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true
# Kotlin code style for this project: "official" or "obsolete": # Kotlin code style for this project: "official" or "obsolete":
kotlin.code.style=official kotlin.code.style=official
# Enables namespacing of each library's R class so that its R class includes only the # Enables namespacing of each library's R class so that its R class includes only the
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment