在Android TV Leanback的ExoPlayer中添加视频控制器及调速功能求助
在简易版ExoPlayer中实现视频控制器与调速功能
一、添加基础视频控制器
ExoPlayer提供了默认的DefaultPlayerControlView,直接关联到PlayerView就能实现播放/暂停、进度条、音量调节等基础控制功能。
1. 布局配置
在布局文件中添加PlayerView和DefaultPlayerControlView(如果不需要自定义控制器位置,也可以直接用PlayerView自带的控制器,跳过手动添加ControlView):
<com.google.android.exoplayer2.ui.PlayerView android:id="@+id/playerView" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 自定义控制器位置,此处固定在底部 --> <com.google.android.exoplayer2.ui.DefaultPlayerControlView android:id="@+id/controlView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom"/> </com.google.android.exoplayer2.ui.PlayerView>
2. 代码关联播放器
在Activity/Fragment中初始化ExoPlayer,并将其关联到视图组件:
val player = ExoPlayer.Builder(this).build() val playerView = findViewById<PlayerView>(R.id.playerView) val controlView = findViewById<DefaultPlayerControlView>(R.id.controlView) // 关联播放器到视图 playerView.player = player controlView.player = player // 加载媒体资源示例 val mediaItem = MediaItem.fromUri("你的视频URL或本地路径") player.setMediaItem(mediaItem) player.prepare() player.play()
如果不需要自定义控制器位置,直接启用PlayerView自带控制器更简洁:
playerView.useController = true // 启用自带控制器 playerView.player = player
二、实现调速功能菜单
通过给控制器添加自定义选项菜单,弹出速度选择对话框即可实现调速功能。
1. 创建菜单资源
在res/menu目录下新建player_menu.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_speed_setting" android:title="播放速度"/> </menu>
2. 绑定菜单与点击事件
在代码中给控制器启用选项菜单,并监听点击事件:
// 启用控制器的选项菜单 controlView.setShowOptionsMenu(true) // 若用PlayerView自带控制器,替换为:playerView.setControllerShowOptionsMenu(true) controlView.setOnOptionsItemSelectedListener { menuItem -> when (menuItem.itemId) { R.id.menu_speed_setting -> { showSpeedSelectionDialog(player) true } else -> super.onOptionsItemSelected(menuItem) } }
3. 实现速度选择对话框
编写弹出对话框的方法,提供多档位速度选择:
private fun showSpeedSelectionDialog(player: ExoPlayer) { val speedOptions = arrayOf("0.5x", "0.75x", "1.0x", "1.25x", "1.5x", "2.0x") // 获取当前速度对应的索引,默认选中1.0x val currentIndex = speedOptions.indexOf("${player.playbackParameters.speed}x") .takeIf { it != -1 } ?: 2 AlertDialog.Builder(this) .setTitle("选择播放速度") .setSingleChoiceItems(speedOptions, currentIndex) { dialog, which -> val selectedSpeed = speedOptions[which].replace("x", "").toFloat() // 设置播放速度 player.setPlaybackParameters(PlaybackParameters(selectedSpeed)) dialog.dismiss() } .setNegativeButton("取消", null) .show() }
注意事项
- 确保项目依赖中包含ExoPlayer UI模块:
implementation "com.google.android.exoplayer:exoplayer-ui:2.19.1" // 替换为最新版本 - 调速功能支持ExoPlayer 2.X版本,低版本API可能略有差异;
- 如需个性化控制器样式,可以自定义继承
PlayerControlView的视图。
内容的提问来源于stack exchange,提问作者Karthik M
相关产品推荐
相关产品推荐

