要在Android中使用Kotlin开发ExoPlayer并自定义SeekBar来设置总进度、播放进度和缓存进度,你可以按照以下步骤进行操作:

  1. 在build.gradle文件中添加ExoPlayer依赖项:
implementation 'com.google.android.exoplayer:exoplayer-core:2.X.X'
implementation 'com.google.android.exoplayer:exoplayer-ui:2.X.X'

请将 2.X.X 替换为你想要使用的最新版本号。

  1. 在你的布局文件中添加一个SeekBar和两个TextView用于显示播放进度和缓存进度:
<SeekBar
    android:id="@+id/seekBar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

<TextView
    android:id="@+id/playbackPosition"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="0:00" />

<TextView
    android:id="@+id/bufferedPosition"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="0:00" />
  1. 在你的Activity或Fragment中,找到SeekBar、TextView和ExoPlayer实例:
val seekBar = findViewById<SeekBar>(R.id.seekBar)
val playbackPositionTextView = findViewById<TextView>(R.id.playbackPosition)
val bufferedPositionTextView = findViewById<TextView>(R.id.bufferedPosition)
val exoPlayer = ExoPlayerFactory.newSimpleInstance(this)
  1. 设置SeekBar的最大值为视频的总时长,并添加一个OnSeekBarChangeListener以便更新播放进度:
seekBar.max = exoPlayer.duration.toInt()

seekBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
    override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
        if (fromUser) {
            exoPlayer.seekTo(progress.toLong())
        }
    }

    override fun onStartTrackingTouch(seekBar: SeekBar?) {}

    override fun onStopTrackingTouch(seekBar: SeekBar?) {}
})
  1. 创建一个Runnable并使用Handler定期更新SeekBar的进度和TextView的文本:
val handler = Handler()
val runnable = object : Runnable {
    override fun run() {
        val playbackPosition = exoPlayer.currentPosition
        val bufferedPosition = exoPlayer.bufferedPosition

        seekBar.progress = playbackPosition.toInt()
        playbackPositionTextView.text = formatTime(playbackPosition)
        bufferedPositionTextView.text = formatTime(bufferedPosition)

        handler.postDelayed(this, 1000) // 每秒更新一次
    }
}

handler.postDelayed(runnable, 0) // 立即开始第一次更新
  1. 在Activity的onStart()方法中开始播放视频,并在onStop()方法中停止播放和更新进度:
override fun onStart() {
    super.onStart()
    exoPlayer.playWhenReady = true
    handler.postDelayed(runnable, 0)
}

override fun onStop() {
    super.onStop()
    exoPlayer.playWhenReady = false
    handler.removeCallbacks(runnable)
}
  1. 创建一个辅助函数来格式化时间:
private fun formatTime(timeMs: Long): String {
    val seconds = (timeMs / 1000).toInt() % 60
    val minutes = (timeMs / (1000 * 60) % 60)
    val hours = (timeMs / (1000 * 60 * 60) % 24)

    return String.format("%02d:%02d:%02d", hours, minutes, seconds)
}

现在,你就可以使用Kotlin开发ExoPlayer并自定义SeekBar来设置总进度、播放进度和缓存进度了。记得在布局文件中添加相应的视图,并在代码中找到它们的引用

Android 使用Kotlin开发 ExoPlayer 自定义SeekBar设置总进度播放进度与缓存进度

原文地址: https://www.cveoy.top/t/topic/iIPF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录