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

news/2024/10/21 3:55:37/

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

目录

最佳实践

播放/暂停按钮

监听状态的更新

处理可用的指令


Media3提供了一个默认的播放器视图,这个视图提供了一些定制化的选项。
对于任何进一步的定制,APP开发者都期望实现他们的自己的用户界面的组件。

最佳实践

当实现的一个媒体用户界面连接到一个媒体3的播放器时,(例如ExoPlayer)
APP被期望遵循如下的最佳实践。

播放/暂停按钮
 

播放/暂停按钮不直接反馈到一个单独的播放器状态。例如,一个用户应用能够
重启动播放,这是在播放结束或者是播放失败时的情况,甚至是播放器没有暂停的状态下。

为了简化实现,媒体3提供了工具方法来决定显示哪一个按钮,并且处理按钮的响应。

Kotlin

val shouldShowPlayButton: Boolean = Util.shouldShowPlayButton(player)
playPauseButton.setImageDrawable(if (shouldShowPlayButton) playDrawable else pauseDrawable)
playPauseButton.setOnClickListener { Util.handlePlayPauseButtonAction(player) }

监听状态的更新

用户界面的组件需要加到一个播放器的监听器中,保证在播放器状态改变时得到播放器的监听器
的通知,这会让用户界面进行更新。

刷新用户界面是有代价的,并且多个播放器事件会一起到来。为了避免刷新用户界面
太频繁了,仅监听onEvents,然后从那触发用户界面的更新比较好:

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

nextButton.isEnabled = player.isCommandAvailable(Player.COMMAND_SEEK_TO_NEXT)


http://www.ppmy.cn/news/1442644.html

相关文章

【C++】---STL容器适配器之底层deque浅析

【C】---STL容器适配器之底层deque浅析 一、deque的使用二、deque的原理1、deque的结构2、deque的底层结构(1)deque的底层空间(2)deque如何支持随机访问、deque迭代器 3、deque的优缺点(1)deque的优势&…

【Verilog-语法】 条件编译 `ifdef/`ifndef

一、前言 在Verilog项目开发过程中某功能是,一部分代码可能有时候用,有时候不用,为了避免全部编译占用资源,可以使用条件编译语句;尤其在大型项目中还可以节约大量的时间。 二、语法 语法书写格式: &am…

制作和合入git补丁

制作git补丁 git log -u a44bc4cf08e94741052cb471512868d14e803f2a -n 1 > log.patch -u显示详细差异 -n日志数量 合入git补丁 git apply log.patch 确保补丁目录与git目录一致

Mybatis学习周报总结

学习Mybatis的周报 在过去的一周里,我们在飞思学习和掌握Mybatis这一优秀的持久层框架。通过谭老师的两周课程,我也有很大的收获。以下是本周的学习总结和收获: 一:Mybatis概述: MyBatis,全称为My Batis …

微信第三方开放平台,实现代公众号保留排版样式和图片发布文章

大家好,我是小悟 要想实现代公众号发布文章的功能,就得接入富文本编辑器,市面上富文本编辑器有很多,轻量的、重量的都有。 从开发者的角度,自然把轻量作为第一选择,因为好对接,怎么方便怎么来…

小型架构实验模拟

一 实验需求 二 实验环境 22 机器: 做nginx 反向代理 做静态资源服务器 装 nginx keepalived filebeat 44机器: 做22 机器的备胎 装nginx keepalived 99机器:做mysql的主 装mysqld 装node 装filebeat 77机器:做mysq…

Android常用的延迟执行任务及轮询定时任务的几种方式

Android常用的延迟执行任务及轮询定时任务的几种方式 Executor 的 execute() 方法:向线程池中提交任务(异步执行)代码示例Timer 的 schedule() 方法:安排执行任务、延时执行任务、轮询定时任务代码示例ScheduledExecutorService:提供了一系列方法用于安排任务的延迟执行、周…

redis基础(一)

启动与关闭 启动命令在/usr/local/bin目录 服务端后台启动:redis-server opt/redis-6.2.1/redis.conf 客户端连接:执行 redis-cli 关闭操作 ​ 方式1:进入终端后关闭 ​ 方式2:直接kill 掉进程 方式3:通过实例关闭 …