动态添加 playView

This commit is contained in:
renhaoting 2025-11-18 17:18:18 +08:00
parent ef03bda916
commit 162ad5288a
4 changed files with 59 additions and 55 deletions

View File

@ -64,6 +64,7 @@ class MainActivity : AppViewsActivity<ViewBinding, UiState, ViewModel>(), OnTabS
viewPager2.isUserInputEnabled = false viewPager2.isUserInputEnabled = false
viewPager2.setPageTransformer { _, _ -> } viewPager2.setPageTransformer { _, _ -> }
viewPager2.offscreenPageLimit
} }
override fun ViewBinding.initListeners() { override fun ViewBinding.initListeners() {

View File

@ -8,6 +8,7 @@ import androidx.core.view.updatePadding
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks import androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks
import androidx.fragment.app.findFragment
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.viewpager2.widget.ViewPager2 import androidx.viewpager2.widget.ViewPager2
import com.ama.core.architecture.appBase.AppViewsFragment import com.ama.core.architecture.appBase.AppViewsFragment
@ -15,6 +16,7 @@ import com.ama.core.architecture.appBase.OnFragmentBackgroundListener
import com.ama.core.architecture.util.setDataOrAdapter import com.ama.core.architecture.util.setDataOrAdapter
import com.ama.core.common.util.asSafe import com.ama.core.common.util.asSafe
import com.gamedog.vididin.main.fragments.home.HomeFragmentStateAdapter import com.gamedog.vididin.main.fragments.home.HomeFragmentStateAdapter
import com.gamedog.vididin.main.fragments.home.fragment.HomeItemFragment
import com.gamedog.vididin.main.interfaces.OnSwitchTabListener import com.gamedog.vididin.main.interfaces.OnSwitchTabListener
import com.gamedog.vididin.main.interfaces.OnTabStyleListener import com.gamedog.vididin.main.interfaces.OnTabStyleListener
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
@ -31,9 +33,6 @@ class HomeFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnSwit
override val mViewModel: ViewModel by viewModels() override val mViewModel: ViewModel by viewModels()
override var isBackgroundBright: Boolean = true override var isBackgroundBright: Boolean = true
//private val mViewPagerAdapter by lazy { HomeFragmentStateAdapter(this) }
private val mViewPagerAdapter by lazy { HomeFragmentStateAdapter(this) } private val mViewPagerAdapter by lazy { HomeFragmentStateAdapter(this) }
override fun inflateViewBinding( override fun inflateViewBinding(
@ -60,14 +59,16 @@ class HomeFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnSwit
override fun onPageSelected(position: Int) { override fun onPageSelected(position: Int) {
super.onPageSelected(position) super.onPageSelected(position)
setHomeTabStyle(mViewPagerAdapter.getFragmentByIndex(position)) setHomeTabStyle(mViewPagerAdapter.getFragmentByIndex(position))
val curFragment: HomeItemFragment = mViewPagerAdapter.getFragmentByIndex(position) as HomeItemFragment
curFragment.loadVideo()
} }
}) })
childFragmentManager.registerFragmentLifecycleCallbacks(object : childFragmentManager.registerFragmentLifecycleCallbacks(object :
FragmentLifecycleCallbacks() { FragmentLifecycleCallbacks() {
override fun onFragmentResumed(fm: FragmentManager, f: Fragment) { override fun onFragmentResumed(fm: FragmentManager, fra: Fragment) {
super.onFragmentResumed(fm, f) super.onFragmentResumed(fm, fra)
setHomeTabStyle(f) setHomeTabStyle(fra)
} }
}, false) }, false)
} }

View File

@ -2,7 +2,6 @@ package com.gamedog.vididin.main.fragments.home.fragment
import android.os.Bundle import android.os.Bundle
import android.provider.MediaStore.Audio.Playlists.Members.PLAYLIST_ID
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.annotation.NonNull import androidx.annotation.NonNull
@ -14,15 +13,13 @@ import com.gamedog.vididin.widget.MyPlayerControlView
import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.PlayerConstants import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.PlayerConstants
import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.YouTubePlayer import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.YouTubePlayer
import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.listeners.AbstractYouTubePlayerListener import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.listeners.AbstractYouTubePlayerListener
import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.listeners.YouTubePlayerListener import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.utils.loadOrCueVideo
import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.options.IFramePlayerOptions
import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.views.YouTubePlayerView import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.views.YouTubePlayerView
import kotlin.apply
import kotlin.toString
import com.gamedog.vididin.databinding.VididinappFeatureHomeItemLayoutBinding as ViewBinding import com.gamedog.vididin.databinding.VididinappFeatureHomeItemLayoutBinding as ViewBinding
class HomeItemFragment : AppViewsEmptyViewModelFragment<ViewBinding>() { class HomeItemFragment : AppViewsEmptyViewModelFragment<ViewBinding>() {
private var mPlayerView: YouTubePlayerView? = null
private var mIsStared = false private var mIsStared = false
private var mPlayer: YouTubePlayer? = null private var mPlayer: YouTubePlayer? = null
private var mVideoData: YoutubeVideo? = null private var mVideoData: YoutubeVideo? = null
@ -33,47 +30,39 @@ class HomeItemFragment : AppViewsEmptyViewModelFragment<ViewBinding>() {
container: ViewGroup?, container: ViewGroup?,
) = ViewBinding.inflate(inflater, container, false) ) = ViewBinding.inflate(inflater, container, false)
override fun ViewBinding.initViews() {
override fun ViewBinding.initViews() {
tvPlay.setOnClickListener { tvPlay.setOnClickListener {
mPlayer?.play() mPlayer?.play()
} }
tvPause.setOnClickListener { tvPause.setOnClickListener {
mPlayer?.pause() mPlayer?.pause()
//mPlayer.seekTo() //mPlayer.seekTo()
mPlayer?.setPlaybackRate(PlayerConstants.PlaybackRate.RATE_2) mPlayer?.setPlaybackRate(PlayerConstants.PlaybackRate.RATE_2)
} }
tvVideoFrom.text = "@From-" + arguments?.getLong(KEY_ID).toString() tvVideoFrom.text = "@From-" + arguments?.getLong(KEY_ID).toString()
tvVideoIntro.text = "Introduce-" + arguments?.getLong(KEY_ID).toString() tvVideoIntro.text = "Introduce-" + arguments?.getLong(KEY_ID).toString()
popMenu.setMenuList( popMenu.setMenuList(
mutableListOf( mutableListOf(
PopMenuIconView.MenuItem(R.mipmap.home_menu_1) { PopMenuIconView.MenuItem(R.mipmap.home_menu_1) {
}, },
PopMenuIconView.MenuItem(R.mipmap.home_menu_2) { PopMenuIconView.MenuItem(R.mipmap.home_menu_2) {
}, },
PopMenuIconView.MenuItem(R.mipmap.home_menu_3) { PopMenuIconView.MenuItem(R.mipmap.home_menu_3) {
}, },
PopMenuIconView.MenuItem(R.mipmap.home_menu_4) { PopMenuIconView.MenuItem(R.mipmap.home_menu_4) {
} }
)) ))
lifecycle.addObserver(youtubePlayerView)
youtubePlayerView.enableBackgroundPlayback(false)
youtubePlayerView.enableAutomaticInitialization = false
} }
fun initAndStartPlay() { fun initAndStartPlay() {
/*
val youtubePlayerView: YouTubePlayerView = binding?.youtubePlayerView!! val youtubePlayerView: YouTubePlayerView = binding?.youtubePlayerView!!
val iFramePlayerOptions = IFramePlayerOptions.Builder(requireContext()) val iFramePlayerOptions = IFramePlayerOptions.Builder(requireContext())
@ -150,21 +139,51 @@ class HomeItemFragment : AppViewsEmptyViewModelFragment<ViewBinding>() {
} }
}, iFramePlayerOptions) }, iFramePlayerOptions)*/
youtubePlayerView.addYouTubePlayerListener(object : AbstractYouTubePlayerListener() {
}
override fun ViewBinding.initListeners() {
ivStar.setOnClickListener {
mIsStared = !mIsStared
ivStar.setImageResource(if (mIsStared) R.mipmap.home_star else R.mipmap.home_star_undo)
}
}
override fun ViewBinding.initObservers() {
}
fun loadVideo() {
if (null == mPlayerView) {
mPlayerView = YouTubePlayerView(requireContext())
binding!!.playerContainer.addView(mPlayerView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
lifecycle.addObserver(mPlayerView!!)
mPlayerView?.enableAutomaticInitialization = true
}
val playerView = mPlayerView
playerView!!.addYouTubePlayerListener(object : AbstractYouTubePlayerListener() {
override fun onReady(@NonNull youTubePlayer: YouTubePlayer) { override fun onReady(@NonNull youTubePlayer: YouTubePlayer) {
mPlayer = youTubePlayer mPlayer = youTubePlayer
//val playerUiController = DefaultPlayerUiController(youtubePlayerView, youTubePlayer) val playerUiController = MyPlayerControlView(playerView, youTubePlayer)
val playerUiController = MyPlayerControlView(youtubePlayerView, youTubePlayer) playerView.setCustomPlayerUi(playerUiController.rootView)
youtubePlayerView.setCustomPlayerUi(playerUiController.rootView)
if (mVideoData != null && !mVideoData?.id.isNullOrEmpty()) { if (mVideoData != null && !mVideoData?.id.isNullOrEmpty()) {
youTubePlayer.loadVideo(mVideoData!!.id, 0f) youTubePlayer.loadOrCueVideo(
lifecycle,
mVideoData!!.id, 0f
)
} }
} }
@ -185,23 +204,6 @@ class HomeItemFragment : AppViewsEmptyViewModelFragment<ViewBinding>() {
}) })
} }
override fun ViewBinding.initListeners() {
ivStar.setOnClickListener {
mIsStared = !mIsStared
ivStar.setImageResource(if (mIsStared) R.mipmap.home_star else R.mipmap.home_star_undo)
}
}
override fun ViewBinding.initObservers() {
try {
initAndStartPlay()
} catch (e: Exception) {
e.printStackTrace()
}
}
companion object { companion object {

View File

@ -11,8 +11,8 @@
android:clickable="true" android:clickable="true"
/> />
<com.pierfrancescosoffritti.androidyoutubeplayer.core.player.views.YouTubePlayerView <FrameLayout
android:id="@+id/youtube_player_view" android:id="@+id/player_container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center"/> android:layout_gravity="center"/>