Andrio studio 学习 之视频弹幕
2019-08-18 22:11
337 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Young_cloud/article/details/99710272
效果
xml布局
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.ytx0904.myapplication.MainActivity"> <!--第一个显示弹幕的--> <SurfaceView android:id="@+id/surface_text" android:layout_width="match_parent" android:layout_height="200dp" /> <!--第二个播放视频--> <SurfaceView android:id="@+id/surface_media" android:layout_width="match_parent" android:layout_height="200dp" /> </FrameLayout>
activity代码
import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.PorterDuff; import android.media.MediaPlayer; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; import java.io.IOException; import javax.security.auth.login.LoginException; public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback { private MediaPlayer mediaPlayer;//播放视频和音频 private SurfaceView surfaceView,surfaceView2;//UI控件,显示画面 private SurfaceHolder surfaceHolder,surfaceHolder2;//不能直接操作surfaceView,但是可以通过surfaceHolder来操作surfaceView int x=20;//文字的初始位置 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //TODO 1:搞mediaPalyer try { initPlayer(); } catch (IOException e) { e.printStackTrace(); } //TODO 2:搞surfaceView ,在surfaceview create生命周期的时候二者绑定 initView(); } //初始化surfaceView private void initView() { //播放视频的 surfaceView=findViewById(R.id.surface_view); surfaceHolder=surfaceView.getHolder(); surfaceHolder.addCallback(this);//设置回调监听:获得surfaceView的生命周期 //显示弹幕的,需要将surfaceView2设置为透明 surfaceView2=findViewById(R.id.surface_view2); surfaceHolder2=surfaceView2.getHolder(); surfaceHolder2.addCallback(this); //TODO :设置surfaceView2透明 surfaceView2.setZOrderOnTop(true); surfaceHolder2.setFormat(PixelFormat.TRANSLUCENT); } //初始化player对象 private void initPlayer() throws IOException { if(mediaPlayer==null){ mediaPlayer=new MediaPlayer(); } mediaPlayer.reset(); mediaPlayer.setDataSource("http://uvideo.spriteapp.cn/video/2019/0512/56488d0a-7465-11e9-b91b-1866daeb0df1_wpd.mp4"); mediaPlayer.prepare(); mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) {//准备完毕了 mediaPlayer.start(); } }); } //创建完成 @Override public void surfaceCreated(SurfaceHolder holder) { if(holder==surfaceHolder){ //将holder和player二者结合在一起 mediaPlayer.setDisplay(surfaceHolder); }else if(holder==surfaceHolder2){//显示弹幕 new Thread(){ @Override public void run() { super.run(); while (true){ try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } //画笔 Paint paint = new Paint(); paint.setStrokeWidth(5); paint.setColor(Color.GREEN); paint.setTextSize(30);//设置文字的大小 Canvas canvas = surfaceHolder2.lockCanvas(); if(canvas==null){ break;} //TODO :这里不将画布刷白,刷透明 canvas.drawColor(PixelFormat.TRANSPARENT, PorterDuff.Mode.CLEAR); canvas.drawText("猴子成精了",x+=20,50,paint); surfaceHolder2.unlockCanvasAndPost(canvas); } } }.start(); } } //改变了 @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } //销毁了 @Override public void surfaceDestroyed(SurfaceHolder holder) { //释放mediaplayer的资源 mediaPlayer.release();//释放资源 mediaPlayer=null;//回收掉 } }
相关文章推荐
- Andrio studio 学习 之打包
- Andrio studio 学习 之 腾讯云直播 实现推流,拉流
- Android Studio tips and tricks 翻译学习
- 视频学习:Bob Martin SOLID Principles of Object Oriented and Agile Design
- System Verilog视频学习笔记(4)- Stimulus driven and received
- OtoStudio学习笔记1(视频截图)
- Struts介绍及学习视频
- 校园视频学习总结
- Deep Learning for Design and Retr of Nano-photonic Structures 论文学习
- PRML(Pattern Recognition And Machine Learning)学习【1】
- iOS中视频播放的学习
- DXperience and eXpressApp Framework v2008 vol 2.3 for Visual Studio 2005, 2008
- xblock-sdk学习笔记之制作studio界面
- qt视频学习笔记1(认识QT、父对象)
- 乙醇的watir-webdriver系列视频第1讲 学习笔记
- 学习笔记- AVFoundation Programming Guide - Still and Video Media Capture
- Code::Blocks 学习助手 和 C++新手视频教程
- ffmpeg学习:ffmpeg下载,播放音频、视频,读取USB摄像头数据流并实时播放
- Python学习案例之视频人脸检测识别
- Neural Networks and Deep Learning 学习笔记(九)