
回复
本项目是基于开源项目DanmakuFlameMaster进行鸿蒙化的移植和开发的,可以通过项目标签以及github地址(https://github.com/bilibili/DanmakuFlameMaster )追踪到原安卓项目版本,该项目的讲解介绍已在公众号发布,可以通过网址( https://harmonyos.51cto.com/posts/3261 )访问相关内容。
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
……
}
如无法运行,删除项目.gradle,.idea,build,gradle,build.gradle文件,
并依据自己的版本创建新项目,将新项目的对应文件复制到根目录下
<master.flame.danmaku.ui.widget.DanmakuView
ohos:id="$+id:sv_danmaku"
ohos:width="match_parent"
ohos:height="match_parent" />
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);
}
}
};
DanmakuFlameMaster_ohos经过Apache License, version 2.0授权许可。