安卓手机APP开发__媒体开发部分__用户界面定制

安卓手机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)
相关推荐
古法安卓27 分钟前
Android-Ext4文件系统问题排查
android·java·android studio
万岳科技程序员小金1 小时前
AI赋能智慧医疗:互联网医院系统源码与智能医院APP开发技术方案
软件开发·app开发·互联网医院系统源码·医院小程序开发·医院app开发
传奇开心果编程2 小时前
【用案例学Material 3 Expressive】第1课:从一封邮件开始,感受安卓设计新语言的表现力
android·学习·ui·kotlin·android jetpack
企业数字化笔记3 小时前
视频音频怎么稳定抽取?从媒体探测到可用音频资产的实现方案
音视频·媒体
生如夏花爱学习229664 小时前
贴心使用的语音生活小助手
android
mmsx4 小时前
Android 状态保持:进程被杀、旋屏与后台任务的存活术
android·kotlin
九皇叔叔4 小时前
【10】SpringBoot4 MyBatisPlus 枚举类型(enum)
android
yubang32231115 小时前
Android保活sdk
android·gitee·保活
2501_916007475 小时前
苹果应用商店App Store上架费用标准及原因解析
android·ios·小程序·https·uni-app·iphone·webview
脚踏实地,坚持不懈!6 小时前
Linux 内核源码解析:从 secondary_startup_64 到 pick_eevdf 的完整调用栈分析
android·linux·arm开发