Android ViewPager2+Fragment 使用 ExoPlayer+ViewModel 播放视频
要在Android中使用ViewPager2和Fragment来播放视频,可以按照以下步骤进行操作:
- 在build.gradle文件中添加ViewPager2和ExoPlayer的依赖项:
implementation 'androidx.viewpager2:viewpager2:1.0.0'
implementation 'com.google.android.exoplayer:exoplayer:2.14.1'
- 创建一个包含ViewPager2的布局文件,例如activity_main.xml:
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
- 创建一个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 = "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()
}
}
- 创建一个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
}
}
- 在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列表
原文地址: http://www.cveoy.top/t/topic/iz0m 著作权归作者所有。请勿转载和采集!