鸿蒙NEXT开发实战教程:仿抖音短视频

news/2025/1/7 19:23:34/文章来源:https://www.cnblogs.com/youlanjihua/p/18522883

今天的实战教程是简单模仿一下抖音短视频,主要是首页部分的内容,先看效果图:

图片

下面为大家讲解这个项目的详细教程。

tabbar

Tabbar的难点在于中间有个发布按钮,思路是我们可以在tabbar里加个判断,中间按钮使用图片,其余按钮使用文字。相关代码如下:

@State arr: Array<string> =  ['首页', '朋友', '发布', '消息', '我'];@Builder TabBuilder(index: number) {Column() {if (index === 2) {Image($rawfile('add.png')).width($r('app.float.width_small'))} else {Text(`${this.arr[index]}`).fontColor(this.currentIndex === index ? Color.Red : Color.Gray).fontSize(17).fontWeight(500)}}.width('100%').height('100%').alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Center).backgroundColor(Color.Black)}

导航栏

这里的导航栏是透明的,而且不占用空间,覆盖在视频之上,所以就不能使用系统的Navigation,我们要自定义一个导航栏。导航栏的内容有两边的图片按钮,还有中间可以滑动的菜单列表,实现代码如下:

Row(){Row(){Image($r('app.media.l_more')).width(25).height(25)}.height(56).width(this.screenWidth/7).justifyContent(FlexAlign.Center).alignItems(VerticalAlign.Center)YLTabbar().width(5*this.screenWidth/7)Row(){Image($r('app.media.find')).width(25).height(25)}.width(this.screenWidth/7).height(56).width(this.screenWidth/7).justifyContent(FlexAlign.Center).alignItems(VerticalAlign.Center)}.margin({top:this.topHeight}).height(56)

播放视频

本项目使用的视频资源是本地文件,存放在rawfile文件夹下,鸿蒙系统提供了Video组件来播放视频,具体使用方法如下:

Video({src: this.videoResource,controller: this.controller}).height('100%').autoPlay(true).controls(false).objectFit(ImageFit.Cover).loop(true)

视频翻页

幽蓝君起初尝试过使用很多组件来实现翻页效果,比如List、Grid等等,最后发现swiper组件的效果最好,也最简单,只是要进行一些属性上的设置,比如动画曲线、循环模式等等,具体代码如下:

Swiper(this.swiperController){SingleRow({videoResource:$rawfile('video1.mp4')})SingleRow({videoResource:$rawfile('video2.mp4')})SingleRow({videoResource:$rawfile('video3.mp4')})}.index(videoIndex) // 设置当前在容器中显示的子组件的索引值.width('100%').height('100%').autoPlay(false).indicator(false).loop(true).duration(200) // 子组件切换的动画时长.cachedCount(0).vertical(true).itemSpace(0)/*** 弹性曲线产生自然的弹簧效果,四个参数分别对应附着在弹簧上的对象的初始速度、附着在弹簧上的对象的质量、单位形变量所需弹力的大小、* 弹簧在振动过程中的减震力,使得弹簧振幅逐渐减小直至停止在平衡位置*/.curve(curves.interpolatingSpring(-1, 1, 328, 34)).onChange((index) => {this.index = index;this.playBoo = true;videoIndex = index;})

以上就是本项目中的一些难点,大家可以私信‘鸿蒙短视频’获取本项目源码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/826022.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS NEXT开发实战教程:选择相册和拍照

今天的内容是介绍在鸿蒙开发中从相册选择照片,和调用相机拍照,并使用这两个功能实现朋友圈编辑页面。这部分内容没什么好废话的,都是固定用法,直接上代码。 首先添加权限:ohos.permission.CAMERAohos.permission.READ_IMAGEVIDEO选择相册:​async getAlbum() {const pho…

Veritas Enterprise Vault 15.1 (Windows) - 自动捕获数据并归档信息

Veritas Enterprise Vault 15.1 (Windows) - 自动捕获数据并归档信息Veritas Enterprise Vault 15.1 (Windows) - 自动捕获数据并归档信息 信息归档解决方案,确保合规与有效的信息治理 请访问原文链接:https://sysin.org/blog/veritas-enterprise-vault-15/ 查看最新版。原创…

鸿蒙开发案例:分贝仪

【1】引言(完整代码在最后面) 分贝仪是一个简单的应用,用于测量周围环境的噪音水平。通过麦克风采集音频数据,计算当前的分贝值,并在界面上实时显示。该应用不仅展示了鸿蒙系统的基础功能,还涉及到了权限管理、音频处理和UI设计等多个方面。 【2】环境准备 电脑系统:win…

读数据工程之道:设计和构建健壮的数据系统26数据建模

数据建模1. 数据建模 1.1. 良好的数据架构必须反映出使用这些数据的组织的业务目标和业务逻辑 1.2. 数据湖1.0、NoSQL和大数据系统的兴起,使工程师们有时是为了合理的性能提升去忽略传统的数据建模 1.3. 数据在企业中的地位急剧上升,人们越来越认识到,建模对于实现数据科学需…

Codeforces Round 984 div3 个人题解(A~F)

Codeforces Round 984 div3 个人题解(A~F) Dashboard - Codeforces Round 984 (Div. 3) - Codeforces 火车头 #define _CRT_SECURE_NO_WARNINGS 1#include <algorithm> #include <array> #include <bitset> #include <cassert> #include <cmath>…

生存目录-无层级

import pypdf# 输入和输出文件名 input_pdf_filename = file.pdf output_pdf_filename = file_with_toc.pdf csv_filename = output.csv# 创建一个PdfWriter实例 writer = pypdf.PdfWriter()# 读取原始PDF文件 with open(input_pdf_filename, "rb") as input_pdf:rea…

提取pdf文档的目录1.0

import fitz # PyMuPDF import pandas as pd# 打开PDF文件 pdf_path = 控制之美.pdf # 请确保替换为正确的文件路径 document = fitz.open(pdf_path)# 初始化一个列表来存储目录信息 toc_list = []# 提取目录信息的函数 def extract_toc(toc, level=0):for item in toc:# 确保…

Redis实现消息发布订阅

对于一些解耦异步行为,往往会使用到MQ消息,但是很多时候可能由于条件受限没有可使用的消息队列供我们使用,那么则可以使用Redis来实现简单的消息发布订阅。 很简单,只需要三个类即可实现。 /*** MQ频道主题配置*/ @Configuration public class RedisConfig {@BeanMessageLi…

TenSunS对接JumpServer:如何把主机自动同步到JumpServer

🦄概述后羿 - TenSunS(原ConsulManager)是一个使用Flask+Vue开发,基于Consul的WEB运维平台,弥补了Consul官方UI对Services管理的不足;并且基于Consul的服务发现与键值存储:实现了Prometheus自动发现多云厂商各资源信息;基于Blackbox对站点监控的可视化维护;以及对自建与…

不同阻尼比下的振动形式-代码

import numpy as np import matplotlib.pyplot as plt# 定义参数 zeta = 0.5 # 阻尼比 omega_n = 1.0 # 自然频率 omega_d = omega_n * np.sqrt(1 - zeta**2) # 阻尼频率 varphi = np.pi / 4 # 相位角# 定义时间变量 t = np.linspace(0, 10, 1000) # 从0到10秒,1000个点#…

TenSunS监控REDIS:使用一个redis_exporter监控所有的Redis实例

🦄概述后羿 - TenSunS(原ConsulManager)是一个使用Flask+Vue开发,基于Consul的WEB运维平台,弥补了Consul官方UI对Services管理的不足;并且基于Consul的服务发现与键值存储:实现了Prometheus自动发现多云厂商各资源信息;基于Blackbox对站点监控的可视化维护;以及对自建与…