# DanmakuFlameMaster_ohos **Repository Path**: noah950/danmaku-flame-master_ohos ## Basic Information - **Project Name**: DanmakuFlameMaster_ohos - **Description**: 鸿蒙开源弹幕解析绘制引擎项目 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2021-10-12 - **Last Updated**: 2021-10-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 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 #### 安装教程 1. 下载弹幕库jar包DanmakuFlameMaster_ohos.jar。 2. 启动 DevEco Studio,将下载的jar包,导入工程目录“entry->libs”下。 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0105/144212_180a0316_8496150.png "屏幕截图.png") 3. 在moudle级别下的build.gradle文件中添加依赖,在dependences标签中增加对libs目录下jar包的引用。 ``` dependencies { implementation fileTree(dir: 'libs', include: ['*.jar', '*.har']) …… } ``` 4. 在导入的jar包上点击右键,选择“Add as Library”对包进行引用,选择需要引用的模块,并点击“OK”即引用成功。 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0105/144236_966cdfb8_8496150.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0105/144247_8a4f9a85_8496150.png "屏幕截图.png") 如无法运行,删除项目.gradle,.idea,build,gradle,build.gradle文件, 并依据自己的版本创建新项目,将新项目的对应文件复制到根目录下 #### 使用说明 1. 布局文件定义,提供控件:DanmukuView ```xml ``` 2. 通过DanmakuContext进行弹幕初始化配置,如.setDanmakuStyle设置描边样式,.setScrollSpeedFactor设置弹幕滚动速度缩放比例等。 3. 通过BaseDanmakuParser创建弹幕解析器对象,解析输入流。 ```java 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解析。 4. 启动弹幕库: ```java //设置弹幕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); ``` 5. 添加文本弹幕: ```java 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); ``` 6. - 弹幕的隐藏:`mDanmakuView.hide()` - 弹幕的显示:`mDanmakuView.show()` - 弹幕的暂停:`mDanmakuView.pause()` - 弹幕的继续:`mDanmakuView.resume()` - 弹幕的定时发送: ```java 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](http://www.apache.org/licenses/LICENSE-2.0)授权许可。