Android弹幕实现基于B站弹幕开源系统1文档格式.docx
- 文档编号:8687281
- 上传时间:2023-05-12
- 格式:DOCX
- 页数:13
- 大小:84.45KB
Android弹幕实现基于B站弹幕开源系统1文档格式.docx
《Android弹幕实现基于B站弹幕开源系统1文档格式.docx》由会员分享,可在线阅读,更多相关《Android弹幕实现基于B站弹幕开源系统1文档格式.docx(13页珍藏版)》请在冰点文库上搜索。
layout_height="
orientation="
vertical"
6.
<
Button
id="
@+id/show"
wrap_content"
11.
text="
显示弹幕"
/>
12.
13.
14.
@+id/hide"
15.
16.
17.
隐藏弹幕"
18.
19.
20.
@+id/sendText"
21.
22.
23.
发送文本弹幕"
24.
25.
26.
@+id/pause"
27.
28.
29.
暂停弹幕"
30.
31.
32.
@+id/resume"
33.
34.
35.
重启弹幕"
36.
37.
master.flame.danmaku.ui.widget.DanmakuView
38.
@+id/danmakuView"
39.
40.
41.
42.<
/LinearLayout>
第三步,写上层Java代码(该处java代码改造自B站弹幕github上的demo代码):
[java]
1.package
zhangphil.danmaku;
3.import
android.app.Activity;
4.import
android.graphics.Color;
5.import
android.os.Bundle;
6.import
android.util.Log;
7.import
android.view.View;
8.import
android.widget.Button;
10.import
java.util.HashMap;
12.import
master.flame.danmaku.danmaku.model.BaseDanmaku;
13.import
master.flame.danmaku.danmaku.model.DanmakuTimer;
14.import
master.flame.danmaku.danmaku.model.IDisplayer;
15.import
master.flame.danmaku.danmaku.model.android.DanmakuContext;
16.import
master.flame.danmaku.ui.widget.DanmakuView;
18.public
class
MainActivity
extends
Activity
private
DanmakuView
mDanmakuView;
DanmakuContext
mContext;
AcFunDanmakuParser
mParser;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDanmakuView
=
(DanmakuView)
findViewById(R.id.danmakuView);
show
(Button)
findViewById(R.id.show);
hide
findViewById(R.id.hide);
sendText
findViewById(R.id.sendText);
pause
findViewById(R.id.pause);
resume
findViewById(R.id.resume);
show.setOnClickListener(new
View.OnClickListener()
public
onClick(View
v)
mDanmakuView.show();
42.
}
43.
});
44.
45.
hide.setOnClickListener(new
46.
47.
48.
mDanmakuView.hide();
49.
50.
51.
52.
sendText.setOnClickListener(new
53.
54.
55.
//每点击一次按钮发送一条弹幕
56.
sendTextMessage();
57.
58.
59.
60.
pause.setOnClickListener(new
61.
62.
63.
mDanmakuView.pause();
64.
65.
66.
67.
resume.setOnClickListener(new
68.
69.
70.
mDanmakuView.resume();
71.
72.
73.
74.
75.
init();
76.
77.
78.
init()
79.
mContext
DanmakuContext.create();
80.
81.
//
设置最大显示行数
82.
HashMap<
Integer,
Integer>
maxLinesPair
new
();
83.
maxLinesPair.put(BaseDanmaku.TYPE_SCROLL_RL,
8);
滚动弹幕最大显示5行
84.
85.
设置是否禁止重叠
86.
Boolean>
overlappingEnablePair
87.
overlappingEnablePair.put(BaseDanmaku.TYPE_SCROLL_RL,
true);
88.
overlappingEnablePair.put(BaseDanmaku.TYPE_FIX_TOP,
89.
90.
mContext.setDanmakuStyle(IDisplayer.DANMAKU_STYLE_STROKEN,
10)
//描边的厚度
91.
.setDuplicateMergingEnabled(false)
92.
.setScrollSpeedFactor(1.2f)
//弹幕的速度。
注意!
此值越小,速度越快!
值越大,速度越慢。
by
phil
93.
.setScaleTextSize(1.2f)
//缩放的值
94.
//.setCacheStuffer(new
SpannedCacheStuffer(),
mCacheStufferAdapter)
图文混排使用SpannedCacheStuffer
95.//
.setCacheStuffer(new
BackgroundCacheStuffer())
绘制背景使用BackgroundCacheStuffer
96.
.setMaximumLines(maxLinesPair)
97.
.preventOverlapping(overlappingEnablePair);
98.
99.
mParser
AcFunDanmakuParser();
100.
mDanmakuView.prepare(mParser,
mContext);
101.
102.
//mDanmakuView.showFPS(true);
103.
mDanmakuView.enableDanmakuDrawingCache(true);
104.
105.
if
(mDanmakuView
!
null)
106.
mDanmakuView.setCallback(new
master.flame.danmaku.controller.DrawHandler.Callback()
107.
108.
updateTimer(DanmakuTimer
timer)
109.
110.
111.
112.
drawingFinished()
113.
114.
115.
116.
117.
danmakuShown(BaseDanmaku
danmaku)
118.
Log.d("
弹幕文本"
"
danmakuShown
+
danmaku.text);
119.
120.
121.
122.
prepared()
123.
mDanmakuView.start();
124.
125.
126.
127.
128.
129.
sendTextMessage()
130.
addDanmaku(true);
131.
132.
133.
addDanmaku(boolean
islive)
134.
BaseDanmaku
danmaku
mContext.mDanmakuFactory.createDanmaku(BaseDanmaku.TYPE_SCROLL_RL);
135.
(danmaku
==
null
||
136.
return;
137.
138.
139.
danmaku.text
zhangphil
@
csdn
:
System.currentTimeMillis();
140.
danmaku.padding
5;
141.
danmaku.priority
0;
可能会被各种过滤器过滤并隐藏显示
142.
danmaku.isLive
islive;
143.
danmaku.setTime(mDanmakuView.getCurrentTime()
1200);
144.
danmaku.textSize
20f
*
(mParser.getDisplayer().getDensity()
-
0.6f);
//文本弹幕字体大小
145.
danmaku.textColor
getRandomColor();
//文本的颜色
146.
danmaku.textShadowColor
//文本弹幕描边的颜色
147.
//danmaku.underlineColor
Color.DKGRAY;
//文本弹幕下划线的颜色
148.
danmaku.borderColor
//边框的颜色
149.
150.
mDanmakuView.addDanmaku(danmaku);
151.
152.
153.
154.
onPause()
155.
super.onPause();
156.
&
mDanmakuView.isPrepared())
157.
158.
159.
160.
161.
162.
onResume()
163.
super.onResume();
164.
mDanmakuView.isPrepared()
mDanmakuView.isPaused())
165.
166.
167.
168.
169.
170.
onDestroy()
171.
super.onDestroy();
172.
173.
dont
forget
release!
174.
mDanmakuView.release();
175.
null;
176.
177.
178.
179.
/**
180.
从一系列颜色中随机选择一种颜色
181.
182.
@return
183.
*/
184.
int
getRandomColor()
185.
int[]
colors
{Color.RED,
Color.YELLOW,
Color.BLUE,
Color.GREEN,
Color.CYAN,
Color.BLACK,
Color.DKGRAY};
186.
i
((int)
(Math.random()
10))
%
colors.length;
187.
return
colors[i];
188.
189.}
代码运行结果如图:
需要特别注意的是本例使用了一个叫做AcFunDanmakuParser的弹幕parser,这个解析器得自己写,自己基于json数据格式实现。
该类写好基本就可以拿来稳定使用,现给出AcFunDanmakuParser的全部源代码:
org.json.JSONArray;
org.json.JSONException;
org.json.JSONObject;
master.flame.danmaku.danmaku.model
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 弹幕 实现 基于 系统