bullet-screen-cj入门实战:几行代码实现弹幕发送、暂停与显示控制
2026/9/24 23:36:31 网站建设 项目流程

bullet-screen-cj入门实战:几行代码实现弹幕发送、暂停与显示控制

【免费下载链接】bullet-screen-cj弹幕发送、解析与绘制库项目地址: https://gitcode.com/Cangjie-TPC/bullet-screen-cj

bullet-screen-cj 是一款基于仓颉语言的开源弹幕库,支持纯文本弹幕发送、图文混排与 GIF 动图弹幕绘制,并提供暂停/继续、隐藏/显示、播放进度跳转等完整的播放状态控制。本文带你用不到 5 分钟跑起第一条弹幕,再用几行代码完成弹幕的暂停与显隐控制,适合刚接触 HarmonyOS 弹幕开发的初学者。

一、30 秒认识弹幕库 bullet-screen-cj 🎬

bullet-screen-cj 把"发送 → 解析 → 绘制"三个环节拆成了几组职责清晰的类,新手只要认识下面四块就够了:

组件角色
DanmakuView弹幕显示组件,一行代码嵌入你的 UI
DanmakuViewModel播放控制器,负责发送、暂停、继续、显隐
DanmakuContext配置中心,控制字体、描边、速度、显示区域
BaseDanmakuParser数据源解析器,内置 JSON 弹幕格式

内置特性包括:左右滚动、顶部/底部固定、特殊弹幕、图文混排、GIF 动图弹幕、显示区域大小设置等。完整示例代码见 entry/src/main/cangjie/src/my_view.cj,运行后能看到滚动弹幕与控制按钮组成的完整界面。

上图是示例应用的启动背景图,配合滚动弹幕一起看,氛围感一下就上来了。

二、弹幕库接入项目最快方法:只改 2 个配置文件

以"拷贝模块"方式接入为例,步骤非常短:

  1. 克隆项目并把danmaku目录拷贝到你的工程根目录:
git clone https://gitcode.com/Cangjie-TPC/bullet-screen-cj
  1. 在 entry/oh-package.json5 的dependencies中加一行:
"danmaku": "file:../danmaku"
  1. 在 entry/src/main/cangjie/cjpm.toml 中添加仓颉依赖:
[dependencies] danmaku = {path = "../../../../danmaku/src/main/cangjie", version = "1.0.0"}
  1. 代码里一行导入:
import danmaku.*

库的包声明为package danmaku,入口文件见 danmaku/src/main/cangjie/src/package.cj。

三、5 步跑起来第一条弹幕

第 1 步:创建控制器与显示区域

var model = DanmakuViewModel() var context = DanmakuContext.create() model.setWidth(720.0) model.setHeight(720.0)

第 2 步:配置显示效果(全部可选,不设也有默认值)

context.setDanmakuStyle(DANMAKU_STYLE_STROKEN, 3.0) // 描边样式 context.setScrollSpeedFactor(1.2) // 滚动速度系数 context.setScaleTextSize(1.2) // 字体大小系数 context.setMaximumLines(linesPair) // 最大显示行数 context.preventOverlapping(overlapPair) // 防重叠开关

第 3 步:绑定解析器,准备就绪

var parser = BaseDanmakuParser.getDefaultJsonDanmakuParser() parser.load(yourDataSource) model.setCallback(callback) // 在 prepared 回调里调用 model.start() model.prepare(parser, context)

第 4 步:把弹幕组件加进页面

DanmakuView(model: this.model)

第 5 步:发送第一条弹幕

var d = context.mDanmakuFactory.createDanmaku(BaseDanmaku.TYPE_SCROLL_RL).getOrThrow() d.text = "你好 仓颉!" d.textColor = 0xffff0000 d.setTime(model.getCurrentTime() + 1200) model.addDanmaku(d)

弹幕类型以常量形式定义在 danmaku/src/main/cangjie/src/model_base_danmaku.cj:

常量含义
TYPE_SCROLL_RL从右到左滚动弹幕
TYPE_SCROLL_LR从左到右滚动弹幕
TYPE_FIX_TOP顶部固定弹幕
TYPE_FIX_BOTTOM底部固定弹幕
TYPE_SPECIAL特殊弹幕

四、一行代码控制弹幕:暂停、继续、隐藏与显示

拿到model之后,常用操作都是"一行一个方法":

需求调用
开始播放model.start()
暂停播放model.pause()
继续播放model.resume()
暂停/继续切换model.toggle()
隐藏弹幕model.hide()
显示弹幕model.show()
跳转到指定时间点model.seekTo(ms)
清屏(清除已播放弹幕)model.clearDanmakusOnScreen()
停止并释放资源model.stop()/model.release()

示例应用正是"一个按钮对应一个方法"的做法:点"pause"直接model.pause(),点"resume"直接model.resume(),做播放/暂停开关的交互时几乎零成本。

五、进阶玩法:图文混排与 GIF 动图弹幕 🚐

图文混排:把缓存填充器换成SpannedCacheStuffer,再给弹幕对象设置image即可:

context.setCacheStuffer(SpannedCacheStuffer(), cacheStufferAdapter: adapter) d.image = ImgObj("resource://RAWFILE/startIcon.png", 33.0, 33.0) d.text = "仓颉你好.."

GIF 动图弹幕:把 GIF 拆成帧序列后挂到弹幕上,设置动图模式:

d.setPixelMapList(frames) // PixelMap 帧列表 d.setIsAnimation(true)

下面这张就是示例中"GIF"按钮所使用的动图素材(RRR.gif),发送后会以小巴士造型一路"开"过屏幕:

六、API 速查与延伸阅读 📚

  • 完整接口文档:doc/feature_api.md
  • 示例应用入口页(数据源切换):entry/src/main/cangjie/src/index.cj
  • 示例弹幕页(发送、暂停、GIF、图文混排):entry/src/main/cangjie/src/my_view.cj
  • 自定义 JSON 解析器实现:entry/src/main/cangjie/src/danma_parser.cj
  • 项目说明与源码目录结构:README.md

版本环境:在 DevEco Studio 5.0.13.200 + Cangjie Compiler 0.53.20 下验证通过。

最后小结DanmakuContext管效果、model.prepare()管准备、addDanmaku()管发送,pause()/resume()/show()/hide()管控制——几行代码就能让你的应用拥有丝滑的弹幕互动效果。

【免费下载链接】bullet-screen-cj弹幕发送、解析与绘制库项目地址: https://gitcode.com/Cangjie-TPC/bullet-screen-cj

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询