-
Notifications
You must be signed in to change notification settings - Fork 2.1k
常见问题
参考 BiliDanmakuParser 扩展实现自己的BaseDanmakuParser,将你自己的格式解析成库支持的数据,在IDanmakuView.prepare的时候传入你的Parser.
参考sample代码,扩展实现CacheStuffer,DanmakuContext.setCacheStuffer()进行设置后生效.
参考sample代码,目前支持Sapn和Spannable类型的字符.
#Example1 #Example2 #利用view实现弹幕自定义布局
HashMap<Integer, Integer> maxLinesPair = new HashMap<Integer, Integer>();
maxLinesPair.put(BaseDanmaku.TYPE_SCROLL_RL, 5); // 滚动弹幕最大显示5行,可设置多种类型限制行数
DanmakuContext.setMaximumLines(maxLinesPair); // 设置
注意如果danmaku.priority>0的话会使这个设置无效.
HashMap<Integer, Boolean> overlappingEnablePair = new HashMap<Integer, Boolean>();
overlappingEnablePair.put(BaseDanmaku.TYPE_SCROLL_RL, true);
overlappingEnablePair.put(BaseDanmaku.TYPE_FIX_TOP, true);
DanmakuContext.preventOverlapping(overlappingEnablePair);
设置启用后会对重叠的弹幕进行丢弃处理.注意如果danmaku.priority>0的话会使这个设置无效.
DanmakuContext.setScrollSpeedFactor(1.2f); // 设置基础速率的1.2系数,速度变慢
弹幕设计如此,需要在统一规定时间内跑完显示.
关系到滚动弹幕统一的速度控制,所有滚动弹幕用了同一个duration实例,单独设置后会对弹幕消失或突然出现。
扩展ImageSpan,重写draw(canvas),参考链接
在视频播放控制中,同时控制danmakuview, 视频start同时调用danmakuview.start 视频pause同时调用danmakuview.pause 视频resume同时调用danmakuview.resume 视频seek同时调用danmakuview.seekTo
// <d p="23.826000213623,1,25,16777215,1422201084,0,057075e9,757076900">我从未见过如此厚颜无耻之猴</d>
// 0:时间(弹幕出现时间)
// 1:类型(1从左至右滚动弹幕|6从右至左滚动弹幕|5顶端固定弹幕|4底端固定弹幕|7高级弹幕|8脚本弹幕)
// 2:字号
// 3:颜色
// 4:时间戳 ?
// 5:弹幕池id
// 6:用户hash
// 7:弹幕id
在drawingFinished回调里使用 danmakuView.seekTo(0)
弹幕丢失怎么办,我本来有10条视频五秒钟的弹幕不显示怎么办 public void cutDanmakuSourceAndStart(String json) { if (mDanmakuContext != null && mDanmakuView != null) { nextVideoRestartDanmaku(); InputStream byteArrayInputStream = new ByteArrayInputStream(json.getBytes()); InputStream inputStream = TextUtils.isEmpty(json) ? mContext.getResources().openRawResource(R.raw.precomments) : byteArrayInputStream; mParser = createParser(inputStream, DanmakuLoaderFactory.TAG_ACFUN); mDanmakuView.prepare(mParser, mDanmakuContext); } }
而且就进去的时候走了Parser的parse方法 后边重新执行mParser = createParser(inputStream, DanmakuLoaderFactory.TAG_ACFUN); mDanmakuView.prepare(mParser, mDanmakuContext); 之后就不再执行parse了