当前位置: 首页 > news >正文

HarmonyOS NEXT应用开发—折叠屏音乐播放器方案

介绍

本示例介绍使用ArkUI中的容器组件FolderStack在折叠屏设备中实现音乐播放器场景。

效果图预览

使用说明

  1. 播放器预加载了歌曲,支持播放、暂停、重新播放,在折叠屏上,支持横屏悬停态下的组件自适应动态变更。

实现思路

  1. 采用MVVM模式进行架构设计,目录结构中区分展示层、模型层、控制层,展示层通过控制层与模型层沟通,展示层的状态数据与控制层进行双向绑定,模型层的变更通过回调形式通知给控制层,并最终作用于展示层。

  2. 在可折叠设备上使用FolderStack组件作为容器组件,承载播放器的所有功能组件,在半折叠态上,使需要移动到上屏的子组件产生相应的动态效果。

// TODO:知识点:FolderStack继承于Stack控件,通过upperItems字段识别指定id的组件,自动避让折叠屏折痕区后移到上半屏
FolderStack({ upperItems: [CommonConstants.FOLDER_STACK_UP_COMP_ID] }) {MusicPlayerInfoComp({ musicModel: this.musicModel, curFoldStatus: this.curFoldStatus }).id(CommonConstants.FOLDER_STACK_UP_COMP_ID)MusicPlayerCtrlComp({ musicModel: this.musicModel })
}
  1. 在需要移动到上屏的子组件上添加属性动效,当组件属性发生变更时,达成动态展示效果。
Image(this.musicModel.cover).width(this.curImgSize).height(this.curImgSize).margin(20).animation(this.attrAniCfg).interpolation(ImageInterpolation.High).draggable(false)
  1. 折叠屏设备上,依赖display的屏幕状态事件,监听屏幕折叠状态变更,通过对折叠状态的分析,更新UI属性。
display.on('foldStatusChange', (curFoldStatus: display.FoldStatus) => {this.curFoldStatus = curFoldStatus;this.windowModel.updateMainWinPreferredOrientation(curFoldStatus);
})

高性能知识点

暂无

工程结构&模块类型

foldablescreencases                  // har类型
|---common
|   |---constants
|   |    |---CommonConstants.ets     // 通用常量
|   |    |---SysCapConstants.ets     // 系统能力常量
|---components
|   |---MusicPlayerCtrlComp.ets      // 自定义组件-音乐播放器控制栏
|   |---MusicPlayerInfoComp.ets      // 自定义组件-音乐播放器歌曲详情展示
|---model
|   |---AVPlayerModel.ets            // 模型层-音频播放管理器 
|   |---MusicModel.ets               // 模型层-音乐歌曲数据模型 
|   |---SysCapModel.ets              // 模型层-系统能力管理器 
|   |---WindowModel.ets              // 模型层-窗口管理器 
|---pages
|   |---MusicPlayerPage.ets          // 展示层-音乐播放器 
|---viewmodel
|   |---MusicPlayerViewModel.ets     // 控制层-音乐播放器控制器

模块依赖

依赖本地的utils模块

参考资料

  • FolderStack
  • 属性动画
  • AVPlayer
  • 状态管理

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr21.cn/FV7h05

腾讯T10级高工技术,安卓全套VIP课程全网免费送:https://qr21.cn/D2k9D5

http://www.lryc.cn/news/319096.html

相关文章:

  • Java项目:55 springboot基于SpringBoot的在线视频教育平台的设计与实现015
  • 说下你对TCP以及TCP三次握手四次挥手的理解?
  • wsl-oracle 安装 omlutils
  • Python类属性和对象属性大揭秘!
  • 北斗卫星在桥隧坡安全监测领域的应用及前景展望
  • 如何通过堡垒机JumpServer使用VisualCode 连接服务器进行开发
  • 【Linux】进程优先级
  • Fair Data Exchange:区块链实现的原子式公平数据交换
  • 详解优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器
  • Vue3+TS+Vite 找不到模块“@/components/xxx/xxx”或其相应的类型声明
  • Vue3-响应式基础:单文件和组合式文件
  • DVWA-File Upload文件上传
  • python之word操作
  • Linux下新增有root权限的用户
  • RPC通信原理(一)
  • 修改/etc/resolve.conf重启NetworkManager之后自动还原
  • Web前端依赖版本管理最佳实践
  • 多线程进阶
  • 总结linux常用命令
  • C++ 枚举
  • Vue2在一个页面内动态切换菜单显示对应的路由组件
  • 执行任务赚积分C卷(JavaPythonC++Node.jsC语言)
  • 接口测试之文件下载
  • 算法思想总结:双指针算法
  • python中的zip函数
  • Element 选择季度组件
  • 4.MongoDB中16个常用CURD
  • Tomcat数据源笔记
  • Spring-Kafka笔记整理
  • 已解决org.apache.hadoop.hdfs.protocol.QuotaExceededException异常的正确解决方法,亲测有效!!!