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 个配置文件
以"拷贝模块"方式接入为例,步骤非常短:
- 克隆项目并把
danmaku目录拷贝到你的工程根目录:
git clone https://gitcode.com/Cangjie-TPC/bullet-screen-cj- 在 entry/oh-package.json5 的
dependencies中加一行:
"danmaku": "file:../danmaku"- 在 entry/src/main/cangjie/cjpm.toml 中添加仓颉依赖:
[dependencies] danmaku = {path = "../../../../danmaku/src/main/cangjie", version = "1.0.0"}- 代码里一行导入:
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),仅供参考