鸿蒙NEXT开发-视频播放绘图能力

server/2025/2/27 11:54:44/

 注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下

如果大家觉得博主文章写的好的话,可以点下关注,博主会一直更新鸿蒙next相关知识

目录

1. 视频播放

1.1 视频播放基本介绍

1.2 加载本地视频

1.3 加载网络视频

1.4 常用属性

1.5 事件调用

1.6 完整案例

 2. 绘图能力

2.1 基本介绍

2.2 接口方法

2.3 开发步骤

2.3.1 定义一个画布

2.3.2 定义一个画笔

2.3.3 画一个带边框的矩形

2.3.4 绘制一个带填充的矩形


1. 视频播放

1.1 视频播放基本介绍

Video组件用于播放视频文件并控制其播放状态,常用于为短视频和应用内部视频的列表页面。当视频完整出现时会自动播放,用户点击视频区域则会暂停播放,同时显示播放进度条,通过拖动播放进度条指定视频播放到具体位置

Video提供构造参数 Video(value: VideoOptions)

VideoOptions对象包含参数src、currentProgressRate、previewUri、controller。其中,src指定视频播放源的路径,currentProgressRate用于设置视频播放倍速,previewUri指定视频未播放时的预览图片路径,controller设置视频控制器,用于自定义控制视频。

Video组件支持加载本地视频和网络视频。

1.2 加载本地视频

加载本地视频时,首先在本地rawfile目录指定对应的文件

再使用资源访问符$rawfile()引用视频资源。

@Entry@Componentstruct VideoCase {build() {Column() {Video({src: $rawfile('04功能体检基础质量测试.mp4')}).width('100%').height('50%')}.height('100%').width('100%')}}

1.3 加载网络视频

加载网络视频时,需要申请权限ohos.permission.INTERNET

注意:网络视频地址是下载地址

@Entry@Componentstruct VideoCase {build() {Column() {Video({src: 'http://121.41.123.231:8888/f/df2d26723a7f4245ae57/?dl=1'}).width('100%').height('50%')}.height('100%').width('100%')}}

1.4 常用属性

@Entry@Componentstruct VideoCase {build() {Column() {Video({src: $rawfile('04功能体检基础质量测试.mp4')}).width('100%').height('50%').muted(false) //设置是否静音.controls(false) //设置是否显示默认控制条.autoPlay(false) //设置是否自动播放.loop(false) //设置是否循环播放.objectFit(ImageFit.Contain) //设置视频适配模式}.height('100%').width('100%')}}

1.5 事件调用

@Entry@Componentstruct VideoCase {build() {Column() {Video({src: $rawfile('04功能体检基础质量测试.mp4')}).width('100%').height('50%').onUpdate((event) => {   //更新事件回调console.info("Video update.");}).onPrepared((event) => {  //准备事件回调console.info("Video prepared.");}).onError(() => {          //失败事件回调console.info("Video error.");}).onStop(() => {          //停止事件回调console.info("Video stoped.");})}.height('100%').width('100%')}}

1.6 完整案例

@Entry@Componentstruct VideoCase {@Statespeed: number = 1controller: VideoController = new VideoController()build() {Row() {Tabs() {TabContent() {Column({ space: 20 }) {Video({controller: this.controller,currentProgressRate: this.speed,src: 'http://121.41.123.231:8888/f/df2d26723a7f4245ae57/?dl=1'}).width('100%').aspectRatio(1.4)Slider({value: this.speed,min: 0.75,step: 0.25,max: 2,style: SliderStyle.InSet}).showSteps(true).onChange(value => {this.speed = value})Text(this.speed+"倍速").fontSize(14).textAlign(TextAlign.Center).width('100%')Row({ space: 20 }) {Button("播放").onClick(() => {this.controller.start()})Button("暂停").onClick(() => {this.controller.pause()})Button("移动进度").onClick(() => {this.controller.setCurrentTime(30) // 单位为秒})Button("结束").onClick(() => {this.controller.stop()})}}.width('100%')}.tabBar("在线视频")TabContent() {Video({src: $rawfile('04功能体检基础质量测试.mp4')}).width('100%').aspectRatio(1.4)}.tabBar("本地视频")}.animationDuration(300)}.height('100%')}}

 2. 绘图能力

2.1 基本介绍

鸿蒙提供画布组件,用于自定义绘制图形,叫Canvas。

ArkUI里面的画布和前端的Canvas的用法基本一致

使用方法

1. 放置Canvas组件-给宽和高

2. 初始化画笔对象 CanvasRenderingContext2D,将画笔对象作为构造参数传递给Canvas组件

3. 可以在Canvas的onReady事件中进行动态绘制

4. 绘制方法参考下面官方文档

官方文档地址:

文档中心

2.2 接口方法

Canvas(context?: CanvasRenderingContext2D | DrawingRenderingContext)

2.3 开发步骤

2.3.1 定义一个画布

// 1、定义一个画布
Canvas().width('300').aspectRatio(1).backgroundColor('#ccc')

2.3.2 定义一个画笔

@Entry@Componentstruct Index {// 给画笔设置属性,实现抗锯齿处理setting = new RenderingContextSettings(true)// 2、画笔context = new CanvasRenderingContext2D(this.setting)build() {Column() {// 1、定义一个画布Canvas(this.context).width('300').aspectRatio(1).backgroundColor('#ccc')}.height('100%').width('100%')}}

2.3.3 画一个带边框的矩形

@Entry@Componentstruct Index {// 给画笔设置属性,实现抗锯齿处理setting = new RenderingContextSettings(true)// 2、画笔context = new CanvasRenderingContext2D(this.setting)build() {Column({space:15}) {// 1、定义一个画布Canvas(this.context).width('300').aspectRatio(1).backgroundColor('#ccc').onReady(()=>{// 准备就绪// 3、画一个带边框的矩形this.context.strokeRect(100,100,50,50)})}.height('100%').width('100%').justifyContent(FlexAlign.Center)}}

2.3.4 绘制一个带填充的矩形

@Entry
@Component
struct Index {// 给画笔设置属性,实现抗锯齿处理setting = new RenderingContextSettings(true)// 2、画笔context = new CanvasRenderingContext2D(this.setting)build() {Column({ space: 15 }) {// 1、定义一个画布Canvas(this.context).width('300').aspectRatio(1).backgroundColor('#ccc').onReady(() => {// 准备就绪// 3、画一个带填充的矩形this.context.fillRect(100, 100, 100, 50)})}.height('100%').width('100%').justifyContent(FlexAlign.Center)}
}


http://www.ppmy.cn/server/171026.html

相关文章

html - 手工添加上次阅读的位置, 方便下次阅读

文章目录 html - 手工添加上次阅读的位置, 方便下次阅读概述笔记END html - 手工添加上次阅读的位置, 方便下次阅读 概述 在看一本电子书,有pdf格式的,但是比较喜欢看html格式的(复制比较方便)。 但是有个缺点,如果看到一半,关掉…

Megatron-LM:使用模型并行训练数十亿参数的语言模型

摘要 最近在语言建模方面的工作表明,训练大型Transformer模型能够推动自然语言处理应用的技术前沿。然而,由于内存限制,训练非常大的模型可能相当困难。在这项工作中,我们展示了训练极大Transformer模型的技术,并实现…

DeepSeek 与网络安全:AI 在网络安全领域的应用与挑战

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 1. 引言 在当今数字化时代,网络安全已成为国家、企业和个人面临的重要挑战。从传统的病毒、木马攻击,到高…

批量将手机照片修改为一寸白底证件照的方法

生活中经常需要用到一寸白底证件照,但每次去照相馆拍摄既费时又麻烦。其实,利用手机拍照和批量证件照生成工具,就能轻松批量修改手机照片为一寸白底证件照。 首先,在电脑浏览器中打开【报名电子照助手】,找到“批量证件…

神经网络参数量计算

算一个只有两层的神经网络的参数量,我们需要考虑两层之间的连接权重和偏置项。以下是详细的计算步骤: 网络结构 输入层(第一层): 有 2 个神经元。 输出层(第二层): 有 3 个神经元。…

使用消息队列怎样防止消息重复?

大家好,我是君哥。 使用消息队列时,我们经常会遇到一个可能对业务产生影响的问题,消息重复。在订单、扣款、对账等对幂等有要求的场景,消息重复的问题必须解决。 那怎样应对重复消息呢?今天来聊一聊这个话题。 1.三…

机器学习破局指南:零基础6个月系统训练计划

以下是为零基础学习者制定的「机器学习」系统学习计划(含学习路径资源推荐),分为6个阶段,建议学习周期4-6个月: 一、基础准备阶段(1-2周) 目标:掌握必要数学工具与编程基础 数学基础…

C/C++动静态库的制作与原理 -- 静态库,动态库,目标文件,ELF文件,动态链接,静态链接

目录 1. 什么是库 2. 静态库 2.1 静态库的制作 2.2 静态库的使用 3. 动态库 3.1 动态库的制作 3.2 动态库的使用 4. 目标文件 5. ELF文件 6. ELF从形成到加载轮廓 6.1 ELF形成可执行 7.2 ELF可执行文件加载 7. 理解链接和加载 7.1 静态链接 7.2 ELF加载与进程地…