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

 

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

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;
})

以上就是本项目中的一些难点

鸿蒙NEXT开发实战教程:仿抖音短视频的更多相关文章

  1. Python音视频开发:消除抖音短视频Logo的图形化工具实现

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 在<Python音视频开发:消除抖音短视频Logo和去电视台标的实现详解>节介绍了怎么通过Python+Moviepy+OpenCV实现 ...

  2. Python音视频开发:消除抖音短视频Logo和去电视台标

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 对于带Logo(如抖音Logo.电视台标)的视频,有三种方案进行Logo消除: 直接将对应区域用对应图像替换: 直接将对应区域模糊化: 通过变换将要 ...

  3. 最新快手抖音短视频源码web+APP架设教程+完整数据

    最新更新快手抖音短视频源码web+APP架设教程+完整数据完美运行 视频直播源码,好东西,反正有人要就是了. 下载地址:https://pan.baidu.com/wap/init?surl=POU5 ...

  4. 视频剪辑软件调研:Adobe Premiere、会声会影、抖音短视频

    Adobe Premiere.会声会影.抖音短视频基本功能特点对比: 特点 Adobe Premiere 会声会影 抖音短视频 运行平台 Win7/Win8/Win10.macOS  Win7/Win ...

  5. Python爬虫---爬取抖音短视频

    目录 前言 抖音爬虫制作 选定网页 分析网页 提取id构造网址 拼接数据包链接 获取视频地址 下载视频 全部代码 实现结果 待解决的问题 前言 最近一直想要写一个抖音爬虫来批量下载抖音的短视频,但是经 ...

  6. JAVA代码实现抖音短视频去水印功能

    今天有人找我帮他抖音视频去水印,发到朋友圈,然后就研究了一下.去水印功能代码如下: public class DouYinQushuiyin { public static void main(Str ...

  7. 抖音短视频爆火的背后到底是什么——如何快速的开发一个完整的直播app

    前言 今年移动直播行业的兴起,诞生了一大批网红,甚至明星也开始直播了,因此不得不跟上时代的步伐,由于第一次接触的原因,因此花了很多时间了解直播,今天我来教你从零开始搭建一个完整的直播app,希望能帮助 ...

  8. Python音视频开发:消除抖音短视频Logo和去电视台标的实现详解

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 对于带Logo(如抖音Logo.电视台标)的视频,有三种方案进行Logo消除: 直接将对应区域用对应图像替换: 直接将对应区域模糊化: 通过变换将要 ...

  9. 100行代码搞定抖音短视频App,终于可以和美女合唱了。

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由视频咖 发表于云+社区专栏 本文作者,shengcui,腾讯云高级开发工程师,负责移动客户端开发 最近抖音最近又带了一波合唱的节奏,老 ...

  10. 10分钟快速上车短视频风口:基于uniapp框架创建自己的仿抖音短视APP

    在今年也就是第48次发布的<中国互联网络发展状况统计报告>有这样一个数据,21年的上半年以来,我国我国网民规模达10.11亿,其中短视频用户达8.88亿.碎片化的生活场景下,短视频成为人们 ...

随机推荐

  1. macOS Monterey(MacOS 12) 系统升级cocoapods

    老款MacBook系统Monterey(MacOS 12)由于brew停止了从上游下载cocoapods提示不支持os12系统,无法安装最新版cocoapods,本文讲述了另一种方法来更新cocoap ...

  2. Arduino 语法--语句

    一.条件判断语句 Arduino 语言基于C和C++,有过开发经验的都知道,C语言中有一些内建指令,这些内建指令中有很重要的几个语句经常用到,这里介绍常用的条件判断语句if和else. if语句 在考 ...

  3. JavaGUI - [03] LayoutManager布局管理器

      Component中有一个方法setBounds()可以设置当前容器的位置和大小,但如果我们手动为组件设置位置和大小的话,就会造成程序的不通用性.LayoutManager布局管理器可以根据运行平 ...

  4. php stripslashes 函数的意思

    脑子不行了,很多东西看过就忘,比如这个stripslashes,知道是去除反斜杠,但为啥用它死活想不起来,搜索一下,把这几篇文章抄下来: 1.反斜杠是怎么回事 两个东西 ini_set(magic_q ...

  5. C# 多线程编程及其几种方式

    引言: 进程(process):应用程序的实例要使用的资源的集合.每个进程被赋予了一个虚拟地址空间,确保在一个进程中使用的代码和数据无法由另一个进程访问. 线程(thread):程序中的一个执行流,每 ...

  6. ascci 码表

  7. windows本地认证

    windows本地认证 本地认证概述 本地认证最简单的例子就是我们的电脑上存储着自己的账号密码,无论电脑是否联网,只要能开机,就可以输入账号密码登录到电脑中,工作组就是采用本地认证. 那认证流程是什么 ...

  8. 200条Git命令复习总结使用

    新建 创建一个新的 git 版本库.这个版本库的配置.存储等信息会被保存到.git 文件夹中 # 初始化当前项目 $ git init # 新建一个目录,将其初始化为Git代码库 $ git init ...

  9. bee must have one register DataBase alias named `default`

    bee must have one register DataBase alias named default 在你初始化db,注册默认数据库时,看看你是否import初始化注册数据库驱动driver ...

  10. Dockerfile 语法与常用命令

    转发请注明出处: 一.Dockerfile 核心语法规则 指令大写:所有指令必须大写(如 FROM, RUN) 顺序执行:指令按顺序从上到下执行 分层构建:每条指令生成一个镜像层,修改上层不会影响下层 ...