动态添加 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.setPageTransformer { _, _ -> }
viewPager2.offscreenPageLimit
}
override fun ViewBinding.initListeners() {

View File

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

View File

@ -2,7 +2,6 @@ package com.gamedog.vididin.main.fragments.home.fragment
import android.os.Bundle
import android.provider.MediaStore.Audio.Playlists.Members.PLAYLIST_ID
import android.view.LayoutInflater
import android.view.ViewGroup
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.YouTubePlayer
import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.listeners.AbstractYouTubePlayerListener
import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.listeners.YouTubePlayerListener
import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.options.IFramePlayerOptions
import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.utils.loadOrCueVideo
import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.views.YouTubePlayerView
import kotlin.apply
import kotlin.toString
import com.gamedog.vididin.databinding.VididinappFeatureHomeItemLayoutBinding as ViewBinding
class HomeItemFragment : AppViewsEmptyViewModelFragment<ViewBinding>() {
private var mPlayerView: YouTubePlayerView? = null
private var mIsStared = false
private var mPlayer: YouTubePlayer? = null
private var mVideoData: YoutubeVideo? = null
@ -33,47 +30,39 @@ class HomeItemFragment : AppViewsEmptyViewModelFragment<ViewBinding>() {
container: ViewGroup?,
) = ViewBinding.inflate(inflater, container, false)
override fun ViewBinding.initViews() {
override fun ViewBinding.initViews() {
tvPlay.setOnClickListener {
mPlayer?.play()
}
tvPause.setOnClickListener {
mPlayer?.pause()
//mPlayer.seekTo()
mPlayer?.setPlaybackRate(PlayerConstants.PlaybackRate.RATE_2)
}
tvVideoFrom.text = "@From-" + arguments?.getLong(KEY_ID).toString()
tvVideoIntro.text = "Introduce-" + arguments?.getLong(KEY_ID).toString()
popMenu.setMenuList(
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() {
/*
val youtubePlayerView: YouTubePlayerView = binding?.youtubePlayerView!!
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) {
mPlayer = youTubePlayer
//val playerUiController = DefaultPlayerUiController(youtubePlayerView, youTubePlayer)
val playerUiController = MyPlayerControlView(youtubePlayerView, youTubePlayer)
youtubePlayerView.setCustomPlayerUi(playerUiController.rootView)
val playerUiController = MyPlayerControlView(playerView, youTubePlayer)
playerView.setCustomPlayerUi(playerUiController.rootView)
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 {

View File

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