鸿蒙开源组件——开源弹幕解析绘制引擎

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

安装教程

  1. 下载弹幕库jar包DanmakuFlameMaster_ohos.jar。
  2. 启动 DevEco Studio,将下载的jar包,导入工程目录“entry->libs”下。鸿蒙开源组件——开源弹幕解析绘制引擎-鸿蒙开发者社区
  3. 在moudle级别下的build.gradle文件中添加依赖,在dependences标签中增加对libs目录下jar包的引用。
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
    	……
    }​
  4. 在导入的jar包上点击右键,选择“Add as Library”对包进行引用,选择需要引用的模块,并点击“OK”即引用成功。

鸿蒙开源组件——开源弹幕解析绘制引擎-鸿蒙开发者社区

鸿蒙开源组件——开源弹幕解析绘制引擎-鸿蒙开发者社区

如无法运行,删除项目.gradle,.idea,build,gradle,build.gradle文件,

并依据自己的版本创建新项目,将新项目的对应文件复制到根目录下

使用说明

  1. 布局文件定义,提供控件:DanmukuView
    <master.flame.danmaku.ui.widget.DanmakuView
                ohos:id="$+id:sv_danmaku"
                ohos:width="match_parent"
                ohos:height="match_parent" />​
  2. 通过DanmakuContext进行弹幕初始化配置,如.setDanmakuStyle设置描边样式,.setScrollSpeedFactor设置弹幕滚动速度缩放比例等。
  3. 通过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解析。

  1. 启动弹幕库:
    /设置弹幕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);​
  2. 添加文本弹幕:
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修改
收藏
回复
举报
回复
    相关推荐