//手动隐藏标题栏
if(getSupportActionBar() != null){
getSupportActionBar().hide();
}
1、添加弹幕依赖
compile'com.github.ctiao:DanmakuFlameMaster:0.7.3'
2、添加权限,这里我用了本地的视频,如果要获取网络上的视频,要添加联网权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
3、在values文件夹下,创建dimens文件
<dimen name="activity_horizontal_margin">16dp</dimen> <dimen name="activity_vertical_margin">16dp</dimen> 4、在res下面创建raw文件夹,然后将视频放进去,到这步,一切准备就绪,下面开始正式上代码了 5、activity_main.xml
RelativeLayout占全屏
<VideoView android:id="@+id/diveo_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" /> <master.flame.danmaku.ui.widget.DanmakuView android:id="@+id/danmaku_view" android:layout_width="match_parent" android:layout_height="match_parent" /> <LinearLayout android:id="@+id/operation_layout" android:layout_width="match_parent" android:layout_height="50dp" android:layout_alignParentBottom="true" android:background="#fff" android:visibility="gone" > <EditText android:id="@+id/edit_text" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1"/> <Button android:id="@+id/send" android:layout_width="wrap_content" android:layout_height="match_parent" android:text="send" /> </LinearLayout>6.在MainActivity里面的代码
private VideoView diveo_view; private DanmakuView danmaku_view; private LinearLayout operation_layout; private EditText edit_text; private Button send; private boolean showDanmaku; private DanmakuContext danmakuContext; 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); //手动隐藏标题 if(getSupportActionBar() != null){ getSupportActionBar().hide(); } initView();//控件初始化 } private void initView() { //控件 diveo_view = findViewById(R.id.diveo_view); danmaku_view = findViewById(R.id.danmaku_view); operation_layout = findViewById(R.id.operation_layout); edit_text = findViewById(R.id.edit_text); send = findViewById(R.id.send); //视频的地址 diveo_view.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.mian)); diveo_view.start();//视频开始 //弹幕 danmaku_view.enableDanmakuDrawingCache(true); danmaku_view.setCallback(new DrawHandler.Callback() { @Override public void prepared() { //准备阶段 showDanmaku = true; danmaku_view.start(); generateSomeDanmaku(); } @Override public void updateTimer(DanmakuTimer timer) { } @Override public void danmakuShown(BaseDanmaku danmaku) { } @Override public void drawingFinished() { } }); danmakuContext = DanmakuContext.create(); danmaku_view.prepare(parser,danmakuContext); //点击屏幕,显示弹幕输入框 //再次点击,隐藏输入框 danmaku_view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(operation_layout.getVisibility() == View.GONE){ operation_layout.setVisibility(View.VISIBLE); }else if(operation_layout.getVisibility() == View.VISIBLE){ operation_layout.setVisibility(View.GONE); } } }); send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //发送消息 addDanmaku(edit_text.getText().toString(),true); } }); } /** * 随机生成一些内容测试 */ private void generateSomeDanmaku() { new Thread(new Runnable() { @Override public void run() { while (showDanmaku){ int time = new Random().nextInt(300); String content = "我是---" + time; addDanmaku(content, false); try { Thread.sleep(time); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); } //添加 private void addDanmaku(String content, boolean b) { BaseDanmaku danmaku = danmakuContext.mDanmakuFactory.createDanmaku(BaseDanmaku.TYPE_SCROLL_RL); danmaku.text = content; danmaku.padding = 5; danmaku.textSize = sp2px(20); danmaku.textColor = Color.WHITE; danmaku.setTime(danmaku_view.getCurrentTime()); if (b) { danmaku.borderColor = Color.GREEN; } danmaku_view.addDanmaku(danmaku); } //文字的大小 private float sp2px(int value) { final float fontScale = getResources().getDisplayMetrics().scaledDensity; return (int) (value * fontScale + 0.5f); } //如果不加这个方法,弹幕可能会从中间显示 @Override protected void onPause() { super.onPause(); if (danmaku_view != null && danmaku_view.isPrepared()) { danmaku_view.pause(); } } //如果不加这个方法,弹幕可能会从中间显示 @Override protected void onResume() { super.onResume(); if (danmaku_view != null && danmaku_view.isPrepared() && danmaku_view.isPaused()) { danmaku_view.resume(); } } @Override protected void onDestroy() { super.onDestroy(); //释放弹幕资源 showDanmaku = false; if (danmaku_view != null) { danmaku_view.release(); danmaku_view = null; } } //Activity一加载完毕,就触发 @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus && Build.VERSION.SDK_INT >= 19) { View decorView = getWindow().getDecorView(); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); } }
=======end=========
到这里全部结束