介绍
这期内容当中小编将会给大家带来有关怎么在Android中利用双重SurfaceView实现弹幕效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
<强>页面布局强>
首先是XML的布局布的局,这里的总的父布局是一个FrameLayout用于贴上两个SurfaceView,一个用来播放视频,一个用来显示弹幕
& lt; ? xml version=?.0“,编码=皍tf-8" ?比; & lt; FrameLayout  xmlns: android=癶ttp://schemas.android.com/apk/res/android" xmlns:才能应用=癶ttp://schemas.android.com/apk/res-auto" xmlns:才能工具=癶ttp://schemas.android.com/tools" android:才能layout_width=癿atch_parent" android:才能layout_height=癿atch_parent" android:才能取向=皏ertical" 工具:才能上下文=?DanmuActivity"祝辞 & lt; SurfaceView才能 ,,,android: id=癅 + id/sv_text" ,,,android: layout_width=癿atch_parent" ,,,android: layout_height=?00 dp"/比; & lt; SurfaceView才能 ,,,android: id=癅 + id/sv_media" ,,,android: layout_width=癿atch_parent" ,,,android: layout_height=?00 dp"/比; ,,,/比; EditText & lt;才能 ,,,android: id=癅 + id/et_text" ,,,android: layout_width=?00 dp" ,,,android: layout_height=皐rap_content" ,,,android: layout_marginTop=?50 dp"/比; & lt;才能按钮 ,,,android: layout_width=皐rap_content" ,,,android: layout_height=皐rap_content" ,,,android:文本=胺⑺汀? ,,,android: layout_marginTop=?00 dp" ,,,android: onClick=癎ogo"/比; & lt;/FrameLayout>
<强>对象类强>
创建一个对象类来存放你所发送的弹幕
public class Danmu { String 才能;文本;//弹幕内容 int 才能;x;//x轴 int 才能;y;//y轴 public 才能Danmu (String 文本){ ,,,this.text =,文本; ,,,//将y设置为随机,弹幕出现的位置也为随机 ,,,this.y =, (int), (math . random () * 400); ,,,this.x =, 0; ,,} }
<>强活动实现SurfaceHolder。回调并重写其方法强>
先定义需要的东西,播放视频我们用媒体播放器
//视频播放 private MediaPlayer 媒体播放器;//弹幕表面与视频表面 private SurfaceView  sv_text, sv_media;//两个表面对应的两个座 private SurfaceHolder  text_holder, media_holder; editText EditText ;//字幕输入框 List初始化媒体播放器,要在第一步执行否则运行会报空,这里封装成了一个方法,直接在onCreate内调用
private void initPlayer (), throws IOException { ,//先判断是否创建过,没创建就创建出来 ,,,if (mediaPlayer ==, null), { ,,,,,mediaPlayer =, new 媒体播放器(); ,,,} ,,,mediaPlayer.reset();//使其恢复空闲状态 ,,,//播放的资源 ,,,mediaPlayer.setDataSource (“http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"); ,,,mediaPlayer.prepare();//准备 ,,,mediaPlayer.setOnPreparedListener (new MediaPlayer.OnPreparedListener (), { ,,,,@Override ,,,,,public void onPrepared (MediaPlayer 议员),{//准备完毕了 ,,,,,,,mediaPlayer.start();//播放 ,,,,,} ,,,}); 以前,,}>初始化控件,同样封装为方法,夹用对应的表面获取到
private void initView (), { ,,,sv_text =, findViewById (R.id.sv_text); ,,,text_holder =, sv_text.getHolder (); ,,,text_holder.addCallback(这个); ,,,sv_media =, findViewById (R.id.sv_media); ,,,media_holder =, sv_media.getHolder (); ,,,media_holder.addCallback(这个); ,,,editText =, findViewById (R.id.et_text); ,,,//设置透明,将播放弹幕的表面放到第一位并设置为背景透明 ,,,sv_text.setZOrderOnTop(真正的); ,,,text_holder.setFormat (PixelFormat.TRANSPARENT); 以前,,}>接下来是表面。回调重写的方法
@Override public 才能;void  surfaceCreated (SurfaceHolder 持有人),{//才能判断当前座是否是媒体的那个 ,,,if (holder ==, media_holder), { ,,,//设置要显示的Surfaceholder ,,,,,mediaPlayer.setDisplay (media_holder); null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null怎么在Android中利用双重SurfaceView实现弹幕效果