回复
鸿蒙开源组件——开源弹幕解析绘制引擎
jacksky
发布于 2021-12-17 18:13
浏览
0收藏
DanmakuFlameMaster_ohos
本项目是基于开源项目DanmakuFlameMaster进行鸿蒙化的移植和开发的,可以通过项目标签以及github地址(https://github.com/bilibili/DanmakuFlameMaster )追踪到原安卓项目版本,该项目的讲解介绍已在公众号发布,可以通过网址( https://harmonyos.51cto.com/posts/3261 )访问相关内容。
项目介绍
- 项目名称:开源弹幕解析绘制引擎项目
- 所属系列:鸿蒙的第三方组件适配移植
- 功能:支持显示、隐藏、显示、暂停、继续、发送、定时发送弹幕
- 项目移植状态:完成
- 调用差异:无
- 开发版本:sdk5
- 项目作者和维护人:熊轶翔
- 联系方式:isrc_hm@iscas.ac.cn
- 原项目Doc地址:https://github.com/bilibili/DanmakuFlameMaster
项目介绍
- 编程语言:Java
- 外部库依赖:org.jar
安装教程
- 下载弹幕库jar包DanmakuFlameMaster_ohos.jar。
- 启动 DevEco Studio,将下载的jar包,导入工程目录“entry->libs”下。
- 在moudle级别下的build.gradle文件中添加依赖,在dependences标签中增加对libs目录下jar包的引用。
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar', '*.har']) …… }
- 在导入的jar包上点击右键,选择“Add as Library”对包进行引用,选择需要引用的模块,并点击“OK”即引用成功。
如无法运行,删除项目.gradle,.idea,build,gradle,build.gradle文件,
并依据自己的版本创建新项目,将新项目的对应文件复制到根目录下
使用说明
- 布局文件定义,提供控件:DanmukuView
<master.flame.danmaku.ui.widget.DanmakuView ohos:id="$+id:sv_danmaku" ohos:width="match_parent" ohos:height="match_parent" />
- 通过DanmakuContext进行弹幕初始化配置,如.setDanmakuStyle设置描边样式,.setScrollSpeedFactor设置弹幕滚动速度缩放比例等。
- 通过BaseDanmakuParser创建弹幕解析器对象,解析输入流。
private BaseDanmakuParser createParser(InputStream stream) { if (stream == null) { return new BaseDanmakuParser() { @Override protected Danmakus parse() { return new Danmakus(); } }; } ILoader loader = DanmakuLoaderFactory.create(DanmakuLoaderFactory.TAG_BILI); try { loader.load(stream); } catch (IllegalDataException e) { e.printStackTrace(); } BaseDanmakuParser parser = new BiliDanmukuParser(); IDataSource<?> dataSource = loader.getDataSource(); parser.load(dataSource); return parser; }
其中通过baseDanmakuParser.load(dataSource)将数据源放入解析,DanmakuLoaderFactory.create(DanmakuLoaderFactory.TAG_BILI)
为xml解析,DanmakuLoaderFactory.create(DanmakuLoaderFactory.TAG_ACFUN)
为json解析。
- 启动弹幕库:
/设置弹幕View相关回调 mDanmakuView.setCallback(new master.flame.danmaku.controller.DrawHandler.Callback() { @Override public void updateTimer(DanmakuTimer timer) { } @Override public void drawingFinished() { } @Override public void danmakuShown(BaseDanmaku danmaku) { } @Override public void prepared() { mDanmakuView.start(); } }); mDanmakuView.prepare(mParser, mContext); mDanmakuView.showFPS(true); mDanmakuView.enableDanmakuDrawingCache(true);
- 添加文本弹幕:
BaseDanmaku danmaku = mContext.mDanmakuFactory.createDanmaku(BaseDanmaku.TYPE_SCROLL_RL);
if (danmaku == null || mDanmakuView == null) {
return;
}
danmaku.text = "这是你自己发的" + System.nanoTime();
danmaku.padding = 5;
danmaku.priority = 0; // 可能会被各种过滤器过滤并隐藏显示
danmaku.isLive = islive;
danmaku.setTime(mDanmakuView.getCurrentTime() + 1200);
danmaku.textSize = 25f * (mParser.getDisplayer().getDensity() - 0.6f);
danmaku.textColor = Color.RED.getValue();
danmaku.textShadowColor = Color.WHITE.getValue();
danmaku.borderColor = Color.GREEN.getValue();
mDanmakuView.addDanmaku(danmaku);
- 弹幕的隐藏:
mDanmakuView.hide()
- 弹幕的显示:
mDanmakuView.show()
- 弹幕的暂停:
mDanmakuView.pause()
- 弹幕的继续:
mDanmakuView.resume()
- 弹幕的定时发送:
Boolean b = (Boolean) mBtnSendDanmakus.getTag();
timer.cancel();
if (b == null || !b) {
mBtnSendDanmakus.setText("取消定时");
timer = new Timer();
timer.schedule(new AsyncAddTask(), 0, 1000);
mBtnSendDanmakus.setTag(true);
} else {
mBtnSendDanmakus.setText("定时发送");
mBtnSendDanmakus.setTag(false);
}
Timer timer = new Timer();
class AsyncAddTask extends TimerTask {
@Override
public void run() {
for (int i = 0; i < 20; i++) {
addDanmaku(true);
SystemClock.sleep(20);
}
}
};
版本迭代
- v0.1.0-alpha
版权和许可信息
DanmakuFlameMaster_ohos经过Apache License, version 2.0授权许可。
danmaku-flame-master_ohos-master.zip 580.63K 15次下载
已于2021-12-17 18:13:21修改
赞
收藏
回复
相关推荐