Android ViewPager2+Fragment 使用 ExoPlayer 播放视频教程
Android ViewPager2+Fragment 使用 ExoPlayer 播放视频教程
本教程将指导您如何在 Android 中使用 ViewPager2 和 Fragment 来播放视频,并使用 ExoPlayer 实现流畅的视频播放体验。我们还将使用 ViewModel 来管理视频播放状态。
1. 添加依赖
在您的 build.gradle 文件中添加以下依赖项:
implementation 'androidx.viewpager2:viewpager2:1.0.0'
implementation 'com.google.android.exoplayer:exoplayer:2.14.1'
2. 创建布局文件
创建一个包含 ViewPager2 的布局文件,例如 activity_main.xml:
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
3. 创建视频 Fragment
创建一个 VideoFragment 类来显示视频:
class VideoFragment : Fragment() {
private lateinit var player: SimpleExoPlayer
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_video, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val videoUrl = arguments?.getString("videoUrl") ?: "YOUR_VIDEO_URL"
val videoView = view.findViewById<SimpleExoPlayerView>(R.id.videoView)
val dataSourceFactory = DefaultDataSourceFactory(requireContext(), Util.getUserAgent(requireContext(), "app"))
val mediaSource = ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(videoUrl))
player = SimpleExoPlayer.Builder(requireContext()).build()
player.prepare(mediaSource)
player.playWhenReady = true
videoView.player = player
}
override fun onDestroyView() {
super.onDestroyView()
player.release()
}
}
4. 创建视频 PagerAdapter
创建一个 VideoPagerAdapter 类来管理 ViewPager2 中的视频片段:
class VideoPagerAdapter(fragmentManager: FragmentManager, lifecycle: Lifecycle) : FragmentStateAdapter(fragmentManager, lifecycle) {
private val videoUrls = listOf(
'VIDEO_URL_1',
'VIDEO_URL_2',
'VIDEO_URL_3'
)
override fun getItemCount(): Int {
return videoUrls.size
}
override fun createFragment(position: Int): Fragment {
val fragment = VideoFragment()
fragment.arguments = Bundle().apply {
putString("videoUrl", videoUrls[position])
}
return fragment
}
}
5. 在 MainActivity 中设置 ViewPager2
在 MainActivity 中设置 ViewPager2 和 VideoPagerAdapter:
class MainActivity : AppCompatActivity() {
private lateinit var viewPager: ViewPager2
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewPager = findViewById(R.id.viewPager)
val videoPagerAdapter = VideoPagerAdapter(supportFragmentManager, lifecycle)
viewPager.adapter = videoPagerAdapter
}
}
总结
通过以上步骤,您就可以在 ViewPager2 中使用 Fragment 和 ExoPlayer 来播放视频。请确保将 YOUR_VIDEO_URL 替换为实际的视频 URL,将 VIDEO_URL_1、VIDEO_URL_2 和 VIDEO_URL_3 替换为您要显示的视频 URL 列表。
扩展
您还可以使用 ViewModel 来管理视频播放状态,例如当前播放的视频、播放进度等。这将使您能够在不同的 Fragment 或 Activity 之间同步视频播放状态。
class VideoViewModel : ViewModel() {
private val _currentVideoUrl = MutableLiveData<String>()
val currentVideoUrl: LiveData<String> = _currentVideoUrl
fun setCurrentVideoUrl(videoUrl: String) {
_currentVideoUrl.value = videoUrl
}
}
在您的 VideoFragment 中,您可以使用 ViewModelProvider 获取 VideoViewModel 并监听 currentVideoUrl 的变化,以便在视频 URL 更改时重新加载视频。
本教程仅为一个基本的示例,您可以根据自己的需求进行扩展和改进。
原文地址: https://www.cveoy.top/t/topic/qg3j 著作权归作者所有。请勿转载和采集!