利用B站弹幕引擎(Danmaku)轻松实现弹幕功能

利用B站弹幕引擎(Danmaku)轻松实现弹幕功能弹幕在直播中是一个比较重要的功能 而开源的 B 站弹幕可以让我们轻松的实现这个功能

大家好,欢迎来到IT知识分享网。

1、首先,在项目中添加依赖:

implementation 'com.github.ctiao:DanmakuFlameMaster:0.5.3' 

其次,就在xml文件中添加覆盖的透明View

<master.flame.danmaku.ui.widget.DanmakuView android:id="@+id/danmaku_view" android:layout_width="match_parent" android:layout_height="match_parent" /> 

最后就是在Activity中的逻辑:

public class MainActivity extends AppCompatActivity { 
    //引入弹幕所需变量 private DanmakuView danmakuView; private DanmakuContext danmakuContext; private boolean showDanmaku; //发送弹幕的输入框和按钮 private EditText editText; private Button btl; private BaseDanmakuParser parser = new BaseDanmakuParser() { 
    @Override protected IDanmakus parse() { 
    return new Danmakus(); } }; @Override protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); danmakuView = (DanmakuView) findViewById(R.id.danmaku_view); editText = findViewById(R.id.et); btl = findViewById(R.id.bt); danmakuView.enableDanmakuDrawingCache(true); //点击发送按钮监听 btl.setOnClickListener(new View.OnClickListener() { 
    @Override public void onClick(View view) { 
    String str = editText.getText().toString(); if (!TextUtils.isEmpty(str)) { 
    //添加弹幕,str为内容。true为是自己发送的,添加方框 addDanmaku(str, true); editText.setText(""); } } }); danmakuView.setCallback(new DrawHandler.Callback() { 
    @Override public void prepared() { 
    showDanmaku = true; danmakuView.start(); generateSomeDanmaku(); } @Override public void updateTimer(DanmakuTimer timer) { 
    } @Override public void danmakuShown(BaseDanmaku danmaku) { 
    } @Override public void drawingFinished() { 
    } }); danmakuContext = DanmakuContext.create(); danmakuView.prepare(parser, danmakuContext); } / * 添加一条弹幕 * * @param content 弹幕的具体内容 * @param withBorder 弹幕是否有边框 */ private void addDanmaku(String content, boolean withBorder) { 
    BaseDanmaku danmaku = danmakuContext.mDanmakuFactory.createDanmaku(BaseDanmaku.TYPE_SCROLL_RL); //设置弹幕内容和样式 danmaku.text = content; danmaku.padding = 5; danmaku.textSize = sp2px(20); danmaku.textColor = Color.BLACK; danmaku.setTime(danmakuView.getCurrentTime()); if (withBorder) { 
    danmaku.borderColor = Color.GREEN; } danmakuView.addDanmaku(danmaku); } / * sp转px的方法。 */ public int sp2px(float spValue) { 
    final float fontScale = getResources().getDisplayMetrics().scaledDensity; return (int) (spValue * fontScale + 0.5f); } @Override protected void onPause() { 
    super.onPause(); if (danmakuView != null && danmakuView.isPrepared()) { 
    danmakuView.pause(); } } @Override protected void onResume() { 
    super.onResume(); if (danmakuView != null && danmakuView.isPrepared() && danmakuView.isPaused()) { 
    danmakuView.resume(); } } @Override protected void onDestroy() { 
    super.onDestroy(); showDanmaku = false; if (danmakuView != null) { 
    danmakuView.release(); danmakuView = null; } } } 

至此。基本的弹幕的功能就算现完成了。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/126444.html

(0)
上一篇 2025-09-18 19:15
下一篇 2025-09-18 19:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信