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

news/2025/2/25 17:32:54

创建项目:

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

使用相对布局(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.niftyadmin.cn/n/5865770.html

相关文章

go:运行第一个go语言程序

1.如何创建go语言编辑界面 2.案例一实现简单打印“hello worlg”: package main import "fmt" func main() { for i : 0; i < 10; { if i < 0 { continue } fmt.Println("hello world") i } } 运行结果&#xff1a; PS D:\demo2> go mod ini…

DeepSeek 助力 Vue 开发:打造丝滑的滚动动画(Scroll Animations)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

elementUI方案汇总

1&#xff1a;el-table 设置固定列&#xff0c;横向滚动条在固定列的位置上无法滚动的问题 问题原因&#xff1a;固定列将下方的滚动条盖住了&#xff0c;无法触发滚动条的滚动。 解决方法&#xff1a;改变固定列的样式&#xff0c;给固定列设置下边距&#xff0c;下边距的大小…

【Godot4.3】自定义圆角容器

概述 Godot控件想要完全实现现代UI风格&#xff0c;需要进行大量的自定义组件设计。本篇就依托于笔者自己对现代UI设计中的圆角面板元素模仿来制作圆角容器组件。 圆角容器 圆角元素在现代的扁平UI设计中非常常见&#xff0c;在Godot中可以通过改进PanelContainer来或者自定…

【IEEE出版,往届会后3个月EI检索 | 西华大学主办 | 中英文期刊、SCI期刊推荐】第四届能源、电力与电气国际学术会议(ICEPET 2025)

第四届能源、电力与电气国际学术会议&#xff08;ICEPET 2025&#xff09;由西华大学主办&#xff0c;西华大学能源与动力工程学院、西华大学电气与电子信息学院、西华大学航空航天学院、流体及动力机械教育部重点实验室、流体机械及工程四川省重点实验室、四川省水电能源动力装…

2025年02月24日Github流行趋势

项目名称&#xff1a;mastra 项目地址url&#xff1a;https://github.com/mastra-ai/mastra 项目语言&#xff1a;TypeScript 历史star数&#xff1a;5735 今日star数&#xff1a;1140 项目维护者&#xff1a;adeleke5140, abhiaiyer91, TheIsrael1, adeniyii, Joshuafolorunsh…

冒泡排序:简单又易于实现的排序算法

大家好&#xff0c;今天我们来聊聊 冒泡排序&#xff08;Bubble Sort&#xff09;算法。听名字是不是很简单&#xff0c;感觉就像是水面上泡泡一样&#xff1f;没错&#xff0c;冒泡排序的名字来源于这种排序过程中&#xff0c;较大的元素像气泡一样逐步“冒泡”到数组的顶端。…

第4章 4.4 EF Core数据库迁移 Add-Migration UpDate-Database

4.4.1 数据库迁移原理 总结一下就是&#xff1a; 1. 数据库迁移命令的执行&#xff0c;其实就是生成在数据库执行的脚本代码&#xff08;两个文件&#xff1a;数字_迁移名.cs 数字_迁移名.Designer.cs&#xff09;&#xff0c;用于对数据库进行定义和修饰。 2. 数据库迁移…