关于安卓接入B站弹幕控件


环境:

as 4.4.2

jdk 1.8


注意!!源码在文末!!


弹幕github官方地址地址


实现场景

通过弹幕与时间关联,实现视频弹幕的播放,滚动进度的时候,弹幕不进行清屏操作

实现代码

对于基础实现,这里没有必要细说,简单就是初始化了相关弹幕对象,然后通过动态添加弹幕, 即可实现。
初始化代码如下:

mDanMuParser = BiliDanmakuParser.createParser(null);
        HashMap maxLinesPair = new HashMap();
        //滚动弹幕最大显示3行
        maxLinesPair.put(BaseDanmaku.TYPE_SCROLL_RL, 3);
        HashMap overlappingEnablePair = new HashMap();
        overlappingEnablePair.put(BaseDanmaku.TYPE_SCROLL_RL, false);
        overlappingEnablePair.put(BaseDanmaku.TYPE_FIX_TOP, false);

        mDanMuContext = DanmakuContext.create();

        try {
            Display display = ((Activity) getContext()).getWindow().getWindowManager().getDefaultDisplay();
            float refreshRate = display.getRefreshRate();
            int rate = (int) (1000 / refreshRate);
            mDanMuContext.setFrameUpateRate(rate);
            Log.d(TAG, mIdentify + "rate: " + rate);
        } catch (Exception e) {
            e.printStackTrace();
            Log.d(TAG, mIdentify + "rate error");
        }
        mDanMuContext.setDanmakuStyle(IDisplayer.DANMAKU_STYLE_STROKEN, 3)
                .setDuplicateMergingEnabled(false)
//                .setScrollSpeedFactor(1.2f)
                .setScaleTextSize(1.2f)
                //绘制背景使用BackgroundCacheStuffer
                .setCacheStuffer(new BackgroundCacheStuffer(), null)
                .setMaximumLines(maxLinesPair)
                .preventOverlapping(overlappingEnablePair)
                .setDanmakuMargin(40);

        prepare(mDanMuParser, mDanMuContext);
        showFPS(false);
        enableDanmakuDrawingCache(true);

弹幕发送代码如下:

            danMuKu.text = bulletInfo.getContent();
            danMuKu.padding = 5;
            //可能会被各种过滤器过滤并隐藏显示
            danMuKu.priority = 1;
            danMuKu.isLive = false;
            if (rightNow) {
                danMuKu.setTime(getCurrentTime() + (new Random().nextInt(10)) + DELAY_TIME);
            } else {
                danMuKu.setTime(getCurrentTime() + bulletInfo.getBeforeInterval() + DELAY_TIME);
            }
            danMuKu.textSize = bulletInfo.getTextSize() * (mDanMuParser.getDisplayer().getDensity() - 0.6f);
            danMuKu.textColor = Color.WHITE;
            danMuKu.textShadowColor = Color.BLACK;
            danMuKu.setTag(TAG_KEY, bulletInfo);
            addDanmaku(danMuKu);

注意要点

1、弹幕实现的过程中,设计到高帧率闪屏问题,请看以下链接
链接。

2、弹幕使用过程中,若存在卡顿,则可以选择继承自surfaceview的基类试试。

3、recyclerview使用的过程中,要结合adapter的生命周期进行弹幕配置参数的初始化。

最后附上代码地址,库名字libbilibilidfm链接

你可能感兴趣的:(关于安卓接入B站弹幕控件)