Commit d26357cb authored by wanglei's avatar wanglei

...

parent 55a87036
......@@ -70,6 +70,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
}
binding.viewPager2.run {
isUserInputEnabled = false
offscreenPageLimit = 1
//https://www.jianshu.com/p/f69bd30cf5b0
//FragmentStateAdapter 这里必须传人fragment
adapter = pageAdapter
......
package com.base.appzxhy.ui.main
import android.content.Intent
import android.view.Gravity
import android.view.View
import android.widget.FrameLayout
import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2
import com.base.appzxhy.R
import com.base.appzxhy.base.BaseFragment
import com.base.appzxhy.databinding.FragmentPlaySlideBinding
import com.base.appzxhy.databinding.LayoutOverlayForyouBinding
import com.base.appzxhy.ui.play.CustomCollectView
import com.base.appzxhy.ui.play.CustomLikeView
import com.base.appzxhy.ui.play.CustomOverlayView
import com.base.appzxhy.ui.play.CustomShareView
import com.base.appzxhy.ui.play.PlayFullActivity
import com.base.appzxhy.utils.LogEx
import com.bytedance.sdk.shortplay.api.PSSDK
import com.bytedance.sdk.shortplay.api.PSSDK.DetailPageConfig
import com.bytedance.sdk.shortplay.api.PSSDK.FeedListLoadResult
import com.bytedance.sdk.shortplay.api.PSSDK.FeedListResultListener
import com.bytedance.sdk.shortplay.api.ShortPlay
import com.bytedance.sdk.shortplay.api.ShortPlayFragment
import com.google.gson.Gson
import kotlin.random.Random
class PlaySlideFragment : BaseFragment<FragmentPlaySlideBinding>(FragmentPlaySlideBinding::inflate) {
......@@ -19,6 +32,10 @@ class PlaySlideFragment : BaseFragment<FragmentPlaySlideBinding>(FragmentPlaySli
private var feedListAdapter: FeedListAdapter? = null
private var currentShortPlayFragment: ShortPlayFragment? = null
// private val customViewSparseArray = SparseArray<CustomOverlayView>()
private var currentShortPlay: ShortPlay? = null
private var currentShortPlayIndex: Int? = null
override fun initView() {
super.initView()
feedListAdapter = FeedListAdapter(this)
......@@ -79,6 +96,12 @@ class PlaySlideFragment : BaseFragment<FragmentPlaySlideBinding>(FragmentPlaySli
private fun createShortPlayFragment(shortPlay: ShortPlay): ShortPlayFragment? {
var freeEp = 10
if (freeEp >= shortPlay.total) {
freeEp = shortPlay.total
}
val startFromIndex = Random.nextInt(1, freeEp)
val builder = DetailPageConfig.Builder()
builder.hideLeftTopCloseAndTitle(true, null)
.displayBottomExtraView(false)
......@@ -86,13 +109,20 @@ class PlaySlideFragment : BaseFragment<FragmentPlaySlideBinding>(FragmentPlaySli
.displayTextVisibility(DetailPageConfig.TEXT_POS_BOTTOM_TITLE, false)
.displayTextVisibility(DetailPageConfig.TEXT_POS_BOTTOM_DESC, false)
.playSingleItem(true)
.startPlayIndex(startFromIndex)
val config = builder.build()
val shortPlayFragment = PSSDK.createDetailFragment(shortPlay, config, object : PSSDK.ShortPlayDetailPageListener {
override fun onProgressChange(shortPlay: ShortPlay, index: Int, currentPlayTime: Int, duration: Int) = Unit
override fun onPlayFailed(errorInfo: PSSDK.ErrorInfo?): Boolean = false
override fun onShortPlayPlayed(shortPlay: ShortPlay?, index: Int) = Unit
override fun onShortPlayPlayed(shortPlay: ShortPlay?, index: Int) {
LogEx.logDebug(TAG, "onShortPlayPlayed shortPlay=$shortPlay index=$index")
currentShortPlay = shortPlay
currentShortPlayIndex = index
}
override fun onItemSelected(position: Int, type: PSSDK.ShortPlayDetailPageListener.ItemType, index: Int) = Unit
override fun onVideoPlayStateChanged(shortPlay: ShortPlay?, index: Int, playbackState: Int) = Unit
override fun onVideoPlayCompleted(shortPlay: ShortPlay?, index: Int) = Unit
......@@ -105,6 +135,71 @@ class PlaySlideFragment : BaseFragment<FragmentPlaySlideBinding>(FragmentPlaySli
override fun onObtainPlayerControlViews(): MutableList<View> {
val views = ArrayList<View>()
val aLLBottomMargin = resources.getDimensionPixelSize(R.dimen.dp_120)
val itemMargin = resources.getDimensionPixelSize(R.dimen.dp_70)
//分享
val customShareView = CustomShareView(requireContext())
customShareView.text = resources.getString(R.string.share)
val shareParams =
FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT).apply {
gravity = Gravity.BOTTOM or Gravity.RIGHT
bottomMargin = aLLBottomMargin
rightMargin = resources.getDimensionPixelSize(R.dimen.dp_18)
}
customShareView.setLayoutParams(shareParams)
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 customCollectView = CustomCollectView(requireContext())
val collectParams =
FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT).apply {
gravity = Gravity.BOTTOM or Gravity.RIGHT
bottomMargin = aLLBottomMargin + itemMargin * 1
rightMargin = resources.getDimensionPixelSize(R.dimen.dp_18)
}
customCollectView.setLayoutParams(collectParams)
// 点赞按钮
val customLikeView = CustomLikeView(requireContext())
val likeParams =
FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT).apply {
gravity = Gravity.BOTTOM or Gravity.RIGHT
bottomMargin = aLLBottomMargin + itemMargin * 2
rightMargin = resources.getDimensionPixelSize(R.dimen.dp_18)
}
customLikeView.setLayoutParams(likeParams)
val customOverlayView = CustomOverlayView(requireContext(), R.layout.layout_overlay_foryou)
customOverlayView.bindItemDataCallBack = { data, index, view ->
val customBinding = LayoutOverlayForyouBinding.bind(view)
customBinding.llBtn.setOnClickListener {
val activity = requireActivity() as MainActivity?
val useData = currentShortPlay ?: data
LogEx.logDebug(TAG, "PlayFullActivity currentShortPlayIndex=$currentShortPlayIndex")
activity?.startActivity(Intent(activity, PlayFullActivity::class.java).apply {
putExtra("data", Gson().toJson(useData))
if (currentShortPlayIndex != null) {
putExtra("startFromIndex", currentShortPlayIndex)
}
})
}
}
views.add(customLikeView)
views.add(customCollectView)
views.add(customShareView)
views.add(customOverlayView)
return views
}
})
......
......@@ -13,11 +13,8 @@ import com.base.appzxhy.R
import com.base.appzxhy.databinding.LayoutOverlayForyouBinding
import com.base.appzxhy.databinding.LayoutOverlayPlayerBinding
import com.base.appzxhy.ui.play.effect.AnimationEffect
import com.base.appzxhy.ui.views.ShortPlayQualityDialog.showShortPlayQualityDialog
import com.base.appzxhy.ui.views.ShortPlaySpeedDialog.showShortPlaySpeedDialog
import com.base.appzxhy.utils.KotlinExt.formatSeconds
import com.base.appzxhy.utils.LogEx
import com.base.appzxhy.utils.ToastUtils.toast
import com.base.appzxhy.utils.Utils.dp
import com.bytedance.sdk.shortplay.api.PSSDK
import com.bytedance.sdk.shortplay.api.ShortPlay
......@@ -37,7 +34,7 @@ class CustomOverlayView : FrameLayout, PSSDK.IControlView {
private var tvPlayTotal: TextView? = null
var bindItemDataCallBack: ((index: Int, customOverlayView: CustomOverlayView) -> Unit)? = null
var bindItemDataCallBack: ((shortPlay: ShortPlay, index: Int, customOverlayView: CustomOverlayView) -> Unit)? = null
constructor(context: Context, layout: Int) : super(context) {
this.layout = layout
......@@ -58,6 +55,7 @@ class CustomOverlayView : FrameLayout, PSSDK.IControlView {
val binding = LayoutOverlayForyouBinding.bind(this)
binding.tvTitle.text = shortPlay.title
binding.tvDesc.text = shortPlay.desc
bindItemDataCallBack?.invoke(shortPlay,index, this)
}
R.layout.layout_overlay_player -> {
......@@ -104,7 +102,7 @@ class CustomOverlayView : FrameLayout, PSSDK.IControlView {
setThumbShadowColor(Color.BLACK)
}
bindItemDataCallBack?.invoke(index, this)
bindItemDataCallBack?.invoke(shortPlay, index, this)
}
}
......
......@@ -52,9 +52,10 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
shortPlay = Gson().fromJson(it, ShortPlay::class.java)
}
shortPlay?.let { showShortPlayerFragment(it) }
shortPlay?.episodes
startFromIndex = intent.extras?.getInt("startFromIndex", 1) ?: 1
LogEx.logDebug(TAG, "startFromIndex=$startFromIndex")
shortPlay?.let { showShortPlayerFragment(it) }
}
override fun initListener() {
......@@ -135,6 +136,7 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
return false
}
@SuppressLint("SetTextI18n")
override fun onShortPlayPlayed(shortPlay: ShortPlay?, index: Int) {
this@PlayFullActivity.shortPlay = shortPlay
startFromIndex = index
......@@ -189,7 +191,7 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
val itemMargin = this@PlayFullActivity.resources.getDimensionPixelSize(R.dimen.dp_70)
// 点赞按钮
val customLikeView = CustomLikeView(applicationContext)
val customLikeView = CustomLikeView(this@PlayFullActivity)
val likeParams =
FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT).apply {
gravity = Gravity.BOTTOM or Gravity.RIGHT
......@@ -200,7 +202,7 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
views.add(customLikeView)
//收藏按钮
val customCollectView = CustomCollectView(applicationContext)
val customCollectView = CustomCollectView(this@PlayFullActivity)
val collectParams =
FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT).apply {
gravity = Gravity.BOTTOM or Gravity.RIGHT
......@@ -211,7 +213,7 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
views.add(customCollectView)
//选集,测试过无法触发点击事件
val customPEView = CustomView(applicationContext, R.mipmap.fy_list)
val customPEView = CustomView(this@PlayFullActivity, R.mipmap.fy_list)
customPEView.text = resources.getString(R.string.list)
val peParams =
FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT).apply {
......@@ -237,7 +239,7 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
}
//分享
val customShareView = CustomShareView(applicationContext)
val customShareView = CustomShareView(this@PlayFullActivity)
customShareView.text = resources.getString(R.string.share)
val shareParams =
FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT).apply {
......@@ -261,7 +263,7 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)
playControlView.let { views.add(it) }
//全局持有控制view
playControlView.bindItemDataCallBack = { index, view ->
playControlView.bindItemDataCallBack = { data, index, view ->
playControlViewSparseArray[index] = view
}
val playerBinding = LayoutOverlayPlayerBinding.bind(playControlView)
......
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