鸿蒙入门指南,小白速来!0基础学习路线分享,高效学习方法,重点答疑解惑--->【课程入口】

目录:

一、弹幕库的基础知识

二、弹幕库的使用方法

三、sample解析

四、作者系列文章合集

前言

基于github上哔哩哔哩开源项目(https://github.com/bilibili/DanmakuFlameMaster),进行了鸿蒙化迁移和重构,可实现弹幕的隐藏、显示、暂停、继续、发送、定时发送弹幕等一系列的功能,代码已经开源到(https://gitee.com/isrc_ohos/danmaku-flame-master_ohos ),欢迎各位下载使用并提出宝贵意见!

为了更加清晰的介绍弹幕库的作用和使用方法,本文将从基础知识、使用方法、 sample解析三个方面进行讲解。

一、弹幕库的基础知识

弹幕库是一个开源的三方库,在正式讲解弹幕库的使用之前,我们先来了解下第三方库的含义。

第三方库是指除本地类库、系统类库以外的类库,需要后来安装,才能调取使用。 简单来讲,相当于其他人写好了代码,实现了一些功能接口,我们直接调用这些接口,就可以实现一些我们想要的功能。举个例子:在一个应用中实现视频缓存功能(断网后可继续播放提前缓存的内容),如果想要自己实现的话,需要调用鸿蒙/安卓底层的方法,代码量非常大。如果已经有第三方库可以做到这点,并且开源了出来,那么你只需要引用他的第三方库,然后调用此库内公开的一些方法接口,简简单单的几行代码就可以实现缓存功能。

了解了什么是第三方库,现在我们来看弹幕库组件。 看视频时,弹幕是必不可少的互动功能,这个功能就是调用了弹幕库组件来实现的。现在我们已经实现了弹幕库功能在鸿蒙平台的构建,接下来我们一起深入了解下鸿蒙平台的弹幕库吧!

二、弹幕库的使用方法

关于弹幕库第三方组件的使用方法,我们准备了视频教学,大家可以下载使用哦~

视频教学版链接:https://www.bilibili.com/video/BV1Dy4y1i7cG/

三、sample解析

导入弹幕库组件后,其整个项目的文件结构如下:

整个项目有2个module:entry和DanmakuFlameMaster。

在这里大家可以简单的理解:

==》  “DanmakuFlameMaster”就是之前提到的【第三方库】,它里面实现了弹幕功能的 所有细节。

==》    entry就是一个具体的“客户端”module,它声明了在鸿蒙程序中的所有运行细节。

==》   最后跑起来的程序就是entry,entry里面实现了所有功能,包括界面、按钮、功能等等,只不过entry调用了第三方库“DanmakuFlameMaster”,使用                           了它的能力来实现了一些弹幕相关的功能。

本篇文章主要介绍如何在已经构建好了“DanmakuFlameMaster”这个第三方库的基础上,来进行“entry”的开发。

为了节省篇幅,此处我们使用一个已经开发完成了的sample,接下来以这个sample为例,向大家讲解弹幕库组件的应用及效果。

将entry展开之后,我们可以看到,真正的代码是真的很少,主要的功能都集中在MainAbility和MainAbilitySlice文件中,加起来的代码量也就不到1000行。

接下面我们对这两个文件进行逐个解析。

1、MainAbility,它是一切应用的入口。根据鸿蒙能力,这里是可以通过setMainRoute()方法调用很多的Slice来进行功能的实现,上图标记的代码就是声明了MainRoute在MainAbilitySlice之中。

2、MainAbilitySlice,这个文件比较重要。

这个文件主要包括:import文件、初始化函数、功能实现函数三个部分。

(1)、import 文件

此处import的文件可以分为三类:SDK文件、应用内文件和三方件文件。

== 》 SDK文件: import后路径为ohos.....的。

== 》应用内文件:import后路径为com.huawei......的。

== 》三方库文件:import后路径为master.flame.danmuku......的。

(2)、初始化函数:

如图所示,初始化函数一共包含六个,我们将其分为五个部分,这五个部分与图中函数的顺序对应如下:UI初始化、视频源的设置与播放(2个函数)、输出系统内存信息、设置数据源(这里的数据指的是弹幕数据)以及弹幕输出。这五个部分之中,我们主要讲解其中的与弹幕库密切相关的部分:UI初始化、弹幕数据源与弹幕输出。

1)onStart方法实现了UI初始化

以上代码构建了弹幕库的显示窗口 设置了屏幕参数的读取 。

2)弹幕数据源和最终的弹幕输出

这两个部分有强相关,我们放在一起来介绍。
        第一步:声明全局变量 mParser用来承载弹幕数据。

第二步:在加载数据源处调用了我们的第三方库的BiliDanmukuParser类,然后从我们的resources中读取弹幕数据:
        可以看到在datasource其实就是读取了这里的文件,大家可以自己点进去看一下这个文件内容,里面就是我们的“弹幕数据库”。

第三步:将载入了弹幕的BaseDanmakuParser类对象,return给全局变量mParser(如果大家想找到这部分代码的话,可以到findview()中去寻找)。

3、功能实现函数

在UI上可见的一些按钮,每个按钮都对应一个callback函数,点击按钮,执行对应的函数体,实现相关功能。

上图所示为点击不同的按钮,出现不同的弹幕效果,例如:隐藏弹幕、显示弹幕、暂停弹幕等。

项目贡献人
熊轶翔 郑森文 朱伟  陈美汝 吕泽

作者:小雪糕123

想了解更多内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区https://harmonyos.51cto.com

鸿蒙开源第三方组件 ——B站开源弹幕库引擎的迁移(上)的更多相关文章

  1. 鸿蒙开源第三方组件——SlidingMenu_ohos侧滑菜单组件

    目录: 1.前言 2.背景 3.效果展示 4.Sample解析 5.Library解析 6.<鸿蒙开源第三方组件>文章合集 前言 基于安卓平台的SlidingMenu侧滑菜单组件(http ...

  2. 鸿蒙开源第三方组件——进度轮ProgressWheel

    目录:1.前言2.背景3.组件功能展示4.Sample解析5.Library解析6.作者系列文章合集 前言 基于安卓平台的进度轮组件ProgressWheel(https://github.com/A ...

  3. 鸿蒙开源第三方件组件——轮播组件Banner

    目录: 1.功能展示 2.Sample解析 3.Library解析 4.<鸿蒙开源第三方组件>系列文章合集 前言 基于安卓平台的轮播组件Banner(https://github.com/ ...

  4. iOS 项目中用到的一些开源库和第三方组件

    iOS 项目中用到的一些 iOS 开源库和第三方组件 分享一下我目前所在公司 iOS 项目中用到的一些 iOS 开源库和第三方组件, 感谢开源, 减少了我们的劳动力, 节约了我们大量的时间, 让我们有 ...

  5. 公司用中会用到的iOS开源库和第三方组件(不断更新...)

    分享一些目前我个人接触到的一些第三方组件和开源的库, 感谢开源, 减少了我们的开发成本, 节约了我们大量的时间, 让我们有更多的时间和精力专注做我们自己的产品.总有没有接触过的 , 总有你会用到的 , ...

  6. 【全网首发】鸿蒙开源三方组件--强大的弹窗库XPopup组件

    目录: 1.介绍 2.效果一览 3.依赖 4.如何使用 5.下载链接 6.<鸿蒙开源三方组件>文章合集 1. 介绍 ​ XPopup是一个弹窗库,可能是Harmony平台最好的弹窗库.它从 ...

  7. 鸿蒙第三方组件——SwipeCaptcha滑动拼图验证组件

    目录:1.组件效果展示2.Sample解析3.<鸿蒙第三方组件>系列文章合集 前言 基于安卓平台的滑动拼图验证组件SwipeCaptcha( https://github.com/mcxt ...

  8. B站开源ijkplayer 等多个项目

    弹幕视频网 Bilibili(B 站)近日在 GitHub 网站上建立了开源工作组(BOSTF),用以分享与维护自己的开源项目,其中包括 DanmakuFlameMaster(燃烧吧!烈焰弹幕使)与 ...

  9. Net Core开源通讯组件 SmartRoute

    Net Core开源通讯组件 SmartRoute(服务即集群) SmartRoute是基于Dotnet Core设计的可运行在linux和windows下的服务通讯组件,其设计理念是去中心化和零配置 ...

随机推荐

  1. go语言常见面试题

    前言 从网上找了一些面试题,觉得有意思的我都记录下来,自己学习和大家一起学习吧. 有些初级的题目只放答案,一些值得探讨的问题我会写上我自己的分析过程,希望大家多多交流. 原文链接 选择题 1.[初级] ...

  2. 织梦dedecms首页、列表页、文章页文章点击浏览次数实时调用方法

    首先呢,先在根目录 /plus 目录下找到count.php  复制一份然后命名为viewclick.php(你也可以命名为你容易理解的名字)用编辑器将viewclick.php打开然后删除以下几行代 ...

  3. PTA 1014 Waiting in Line (30分) 解题思路及满分代码

    题目 Suppose a bank has N windows open for service. There is a yellow line in front of the windows whi ...

  4. 2019牛客暑期多校训练营(第八场)B-Beauty Values(期望线性性)

    >传送门< 题意:思路:期望的线性性(可加性),比赛的时候写的代码超级无敌长,不过值得欣慰的是一发AC了,官方的题解写的还不错~ 我们可以把每种数字对答案的贡献分开来计算,即枚举每个数字, ...

  5. L3-007 天梯地图 (30分) 最短路+dp

    最短路+dp思路:nuoyanli 520 Let's play computer game 输入样例1: 10 15 0 1 0 1 1 8 0 0 1 1 4 8 1 1 1 5 4 0 2 3 ...

  6. ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (ECPC 2015) G. It is all about wisdom (二分,单源最短路)

    题意:有\(n\)个点,\(m\)条边,只有当你的智力值大于这条边的\(w\)才能走,问在花费不超过\(k\)的情况下,从\(1\)走到\(n\)的所需的最小智力值. 题解:这题比赛为什么没想出来呢? ...

  7. Linux core dump使用

    什么是 core dump? core dump是一个当进程意外终止时包含进程内存内容的文件.当程序崩溃的时候,core dump由kernel触发.core dump可以作为程序崩溃时的事后快照(p ...

  8. Python基础--核心数据类型

    python的核心数据类型: Number 数字(整数,浮点数,复数,布尔型数) String 字符串 List 列表 Tuple 元组 Dictionary 字典 Set 集合 1. 整数(整型数) ...

  9. 如何自己绘制fcitx4输入法皮肤?

    先来给大家看看我自己修改后的结果 当然你可以自己设计,自己定义喜欢的颜色和样式 但是注意,这个教程仅仅针对使用fcitx皮肤面板的输入法,例如rime.sunpinyin等. 搜狗输入法.讯飞输入法. ...

  10. js的变量,作用域,内存

    一,基本类型和引用类型的值基本类型的值是按值访问的,引用类型的值是保存在内存中的对象1,动态的属性 只有引用类型的值可以添加属性方法 不能给基本类型添加属性和方法2,复制变量值 复制基本类型的值,两个 ...