安卓手机APP开发__媒体开发部分__用户界面定制
目录
Media3提供了一个默认的播放器视图,这个视图提供了一些定制化的选项。
对于任何进一步的定制,APP开发者都期望实现他们的自己的用户界面的组件。
最佳实践
当实现的一个媒体用户界面连接到一个媒体3的播放器时,(例如ExoPlayer)
APP被期望遵循如下的最佳实践。
播放/暂停按钮
播放/暂停按钮不直接反馈到一个单独的播放器状态。例如,一个用户应用能够
重启动播放,这是在播放结束或者是播放失败时的情况,甚至是播放器没有暂停的状态下。
为了简化实现,媒体3提供了工具方法来决定显示哪一个按钮,并且处理按钮的响应。
Kotlin
Kotlin
val shouldShowPlayButton: Boolean = Util.shouldShowPlayButton(player)
playPauseButton.setImageDrawable(if (shouldShowPlayButton) playDrawable else pauseDrawable)
playPauseButton.setOnClickListener { Util.handlePlayPauseButtonAction(player) }
监听状态的更新
用户界面的组件需要加到一个播放器的监听器中,保证在播放器状态改变时得到播放器的监听器
的通知,这会让用户界面进行更新。
刷新用户界面是有代价的,并且多个播放器事件会一起到来。为了避免刷新用户界面
太频繁了,仅监听onEvents,然后从那触发用户界面的更新比较好:
Kotlin
Kotlin
player.addListener(object : Player.Listener{
override fun onEvents(player: Player, events: Player.Events){
if (events.containsAny(
Player.EVENT_PLAY_WHEN_READY_CHANGED,
Player.EVENT_PLAYBACK_STATE_CHANGED,
Player.EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED)) {
updatePlayPauseButton()
}
if (events.containsAny(Player.EVENT_REPEAT_MODE_CHANGED)) {
updateRepeatModeButton()
}
}
})
处理可用的指令
一个通用的目的的用户界面的组件,可能需要和不同的播放器的实现一起工作。
应该检查可用的播放器的指令,来显示或者隐藏按钮,来避免调用了不支持的方法:
Kotlin
Kotlin
nextButton.isEnabled = player.isCommandAvailable(Player.COMMAND_SEEK_TO_NEXT)