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

11_17日项目笔记——制作“全屏播放页面”

创建项目:

项目需求:要实现的页面效果

使用相对布局(Relative):

所需图片资源需要请点击我https://download.csdn.net/download/m0_73992525/90009094?spm=1001.2014.3001.5503

修改默认启动页面

此时应用启动默认加载首页Index.ets,要将其修改于一下,让其默认加载‘全屏播放页面’


在“FullscreePlay”页面即将显示时,将屏幕横屏过来

1、将屏幕设置为全屏

设置全屏前:

设置全屏后:

前后对比:

2、将屏幕设置为横屏

内容方面:

首选相对布局:


相对容器的使用方法:

相对布局官方指导文档点我!

设置锚点

做微调的方式:

  1. 使用margin(外边距)做微调,会影响周围兄弟元素
  2. 使用offset,不会影响周围的兄弟元素,起点为自己的默认设置,移走后,不释放所占的空间
  3. 使用position(绝对定位)--- 起点为父容器的左上角,移走后释放所占的空间

使用Video

1、静态页面设计:

背景视频

先用Row代替,设置背景颜色

播放/暂停按钮

顶部的后退按钮+标题+更多

底部播放控制条

注意:progress默认宽度为100%,会导致一行内容溢出,使用layoutweight()布局权重,此时为收缩

添加小圆饼(在进度条上)

相对容器会随着页面滚动而滚动,stack(层叠布局不会随着页面滚动而滚动!)

progress进度条与小圆饼是一起的,所以要在一个容器中,可用将他们两个放入一个容器,用Row更简单!

记住:此时进度条的权重就不是加给Progress,而是加给外层的Row组件。

如何调整小圆饼位置:

做微调的方式:

  1. 使用margin(外边距)做微调,会影响周围兄弟元素
  2. 使用offset,不会影响周围的兄弟元素
  3. 使用position(绝对定位)

最外层背景颜色改为黑色:

使用position更合适,可以使其向上走一点

完整代码:

// 底部的播放控制条
      Row({space:15}){
        // 进行时长
        Text('03:23')
          .fontColor('#fff')

        // 进度条
        Row(){
          // 进度条
          Progress({
            value:50
          })
            .backgroundColor('#fff')    //背景色,未进行的进度条颜色
            .color('#E89E42')     //进行过的进度条颜色

          // 小圆饼
          Row()
            .width(20)
            .height(20)
            .borderRadius(50)
            .backgroundColor('#fff')
            // .offset({x:-60,y:0})    //①margin②offset(起点为自己的默认位置)③position
            .position({x:0,y:-8})

        }.layoutWeight(1)

静态页面基本完成:

完整代码:

import { window } from '@kit.ArkUI'

@Entry
@Component
struct Demo1 {
  async aboutToAppear(){
   let w = await window.getLastWindow(getContext())
    w.setWindowLayoutFullScreen(true)
    w.setPreferredOrientation(window.Orientation.LANDSCAPE)
  }

  build() {
    RelativeContainer(){
      //最底部视频
      Row(){}
      .width('100%')
      .height('100%')
      // .backgroundColor('#000')
      // 顶部的后退按钮+标题+更多
      Row(){
        // 返回按钮
        Image('/images/back.svg')
          .width(9)
        // 文本
        Text('Axure RP9教程:手把手教你制作交互案例')
          .fontColor('#fff')
          .layoutWeight(1)    //布局权重为1,占用剩余 所有的剩余空间
          .margin({left:20})
        // 更多按钮
          Image('/images/more.svg')
            .width(20)
            .fillColor('#fff')

      }
      .width('100%')
      .padding({left:20,right:20,top:20})

      // 播放/暂停按钮
      Image('/images/play2.svg')
        .width(50)
        .height(50)
        .alignRules({
          middle:{anchor:'__container__',align:HorizontalAlign.Center},
          center:{anchor:'__container__',align:VerticalAlign.Center}
        })

      // 底部的播放控制条
      Row({space:15}){
        // 进行时长
        Text('03:23')
          .fontColor('#fff')

        // 进度条
        Row(){
          // 进度条
          Progress({
            value:50
          })
            .backgroundColor('#fff')    //背景色,未进行的进度条颜色
            .color('#E89E42')     //进行过的进度条颜色

          // 小圆饼
          Row()
            .width(20)
            .height(20)
            .borderRadius(50)
            .backgroundColor('#fff')
            // .offset({x:-60,y:0})    //①margin②offset(起点为自己的默认位置)③position
            .position({x:0,y:-8})

        }.layoutWeight(1)

        // 总时长
        Text('05:31')
          .fontColor('#fff')

        // 清晰度
        Text('标清')
          .fontColor('#fff')

        //收缩
        Image('/images/zoomin.svg')
          .width(15)

      }
      .width('100%')
      .padding({left:20,right:20,bottom:20})
      .alignRules({
        bottom:{anchor:'__container__',align:VerticalAlign.Bottom}
      })


    }
    .height('100%')
    .width('100%')
    .backgroundColor('#fdd')
  }
}

2、动态页面设计:

(1)最底部的视频播放

Video组件官方文档,想看点我!

video相关属性想看点我

1、videooptions对象

2、要想视频能够播放需要申请权限

3、解决默认显示video组件中自带的播放灯等按钮

使用属性

.controls(false)   //是否显示默认提供的播放组件

解决默认显示video组件中自带的播放灯等按钮

4、video组件天然不支持后台播放

5、文字无法完全显示,宽高比不一致!

objectfit属性

imagefix枚举类型

(2)控制其播放暂停按钮

(3)获得“播放总时长”和“播放总进度”

1、获取播放总时长

2、获取播放总进度:

3、将“播放总时长”和“播放总进度”的时间打印出来

将原本固定静态的文本框,用“播放总时长”和“播放总进度”替换为状态变量!

(4)进度条随进度条改变

1、进度条进度

2、小圆饼

(5)提供视频回放的进度(可以在任一点播放)




问题:

①没法进入后台播放

②视频播放时长单位为秒,进度条一秒钟才能走一步,太慢了。


③video无法实现弹幕效果

video只能做一些简单的视频播放。

video不能在视频中放一些复杂的东西(追加在视频上的内容,如弹幕、礼物),做不了网络直播

要想实现------》用AVPlayer

使用AVPlayer

AVPlayer是对象,不是页面中的UI组件


开发步骤:

① 调用createAVPlayer()创建AVPlayer实例,初始化进入idle状态

把video换掉,换用一个可以播放视频的组件Xcomponent(可理解为一个画布,画布可以绘制任何类型,

都用XComponent例如:

像绘制月牙形的按钮,就需要自己绘制。

游戏领域

美颜相机,带一个头饰,周围有东西,将拍的东西做绘图处理,就需要xcomponnet。

视频播放,想实现弹幕等就需要Xcomponent)

文档中心

先删除video组件

添加Xcomponent组件


创建AVPlayer



解决方式:



② 设置业务需要的监听事件,搭配全流程场景使用,如:stateChange、error等

创建监听事件 .on


③ 设置资源:设置属性url,AVPlayer进入initialized状态

视频播放来源可能是如下情形:

1.本地资源播放:必须确认资源文件可用,并使用应用沙箱路径访问对应资源

2. 网络播放路径:需声明权限 ohos.permission.INTERNET

3. HAP包中的资源路径:使用ResourceManager.getRawFd打开HAP资源文件描述符

只有指定URL,才能使状态机发生改变



④ 设置窗口:获取并设置属性SurfaceID,用于设置显示画面;应用需要从XComponent组件获取surfaceID

⑤ 准备播放(prepared就绪态):调用prepare(),AVPlayer进入prepared状态,此时可以获取duration(总时长),设置缩放模式、音量等


⑥ 视频播控(playing播放态):播放play(),暂停pause(),跳转seek(),停止stop() 等操作

进入播放状态:


⑦ (可选)更换资源:调用reset()重置资源,AVPlayer重新进入idle状态,允许更换资源url

⑧ 退出播放:调用release()销毁实例,AVPlayer进入released状态,退出播放


http://www.kler.cn/a/560246.html

相关文章:

  • 数仓搭建实操(传统数仓oracle):[构建数仓层次|ODS贴源层]
  • 用HTML5+CSS+JavaScript实现新奇挂钟动画
  • JVM可用的垃圾回收器
  • LeetCode - 23 合并 K 个升序链表
  • 【拥抱AI】GPT Researcher 源码试跑成功的心得与总结
  • STM32-智能小车项目
  • mysql对中文列值进行排序
  • HOW - 个人创业(融资篇)
  • 【JavaScript】JavaScript 常见概念 - 变量与数据类型 - 运算符 - 条件语句 - 循环 - 函数 - 数组操作 - 对象
  • Rust学习~tokio简介
  • Java集合并发安全面试题
  • 2022 年学习 Spring Boot 开发的最佳书籍
  • 【大模型】蓝耘智算云平台快速部署DeepSeek R1/R3大模型详解
  • uniapp通过概率实现一个随机抽奖
  • 如何用JAVA实现布隆过滤器?
  • WinForm中的Invoke函数
  • Dify工具的安装和使用
  • 【AIGC系列】1:自编码器(AutoEncoder, AE)
  • 使用自制工具类实现安全的密码加密与校验
  • Linux操作系统:基于Linux的入侵检测系统(IDS)研究与实践