博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android开发之MediaPlayer和SurfaceView组成视频播放器
阅读量:6592 次
发布时间:2019-06-24

本文共 2268 字,大约阅读时间需要 7 分钟。

SurfaceView 

  • 使用双缓冲技术
  • 是个重量级的组件
  • 只要不可见,就不会创建,可见时,才会创建
  • 只要不可见,就会销毁

 SurfaceView一旦不可见,就会被销毁,一旦可见,就会被创建,销毁时停止播放,再次创建时再开始播放

 

1 import android.app.Activity; 2 import android.media.MediaPlayer; 3 import android.os.Bundle; 4 import android.view.SurfaceHolder; 5 import android.view.SurfaceHolder.Callback; 6 import android.view.SurfaceView; 7  8 public class MainActivity extends Activity { 9     private MediaPlayer player;10     static int currentPosition;11 12     @Override13     protected void onCreate(Bundle savedInstanceState) {14         super.onCreate(savedInstanceState);15         setContentView(R.layout.activity_main);16 17         SurfaceView sv = (SurfaceView) findViewById(R.id.sv);18         // 拿到surfaceview的控制器19         final SurfaceHolder sh = sv.getHolder();20         //给SurfaceHolder设置CallBack,类似于侦听,可以知道SurfaceView的状态21         sh.addCallback(new Callback() {22             // surfaceView销毁时调用23             @Override24             public void surfaceDestroyed(SurfaceHolder holder) {25                 // 每次surfaceview销毁时,同时停止播放视频26                 if (player != null) {27                     currentPosition = player.getCurrentPosition();28                     player.stop();29                     player.release();30                     player = null;31                 }32             }33 34             // surfaceView创建时调用35             @Override36             public void surfaceCreated(SurfaceHolder holder) {37                 // 每次surfaceView创建时才去播放视频38                 if (player == null) {39                     player = new MediaPlayer();40                     player.reset();41                     try {42                         player.setDataSource("sdcard/2.3gp");43                         player.setDisplay(sh);44                         player.prepare();45                         player.start();46                         player.seekTo(currentPosition);47                     } catch (Exception e) {48                         e.printStackTrace();49                     }50                 }51 52             }53 54             // surfaceView结构改变时调用55             @Override56             public void surfaceChanged(SurfaceHolder holder, int format,57                     int width, int height) {58             }59         });60     }61 }

 

转载地址:http://whdio.baihongyu.com/

你可能感兴趣的文章
spring boot 1.5.4 整合webService(十五)
查看>>
modsecurity(尚不完善)
查看>>
获取.propertys文件获取文件内容
查看>>
Redis3.0.5配置文件详解
查看>>
前端05.js入门之BOM对象与DOM对象。
查看>>
keepalived双机热备原理及实例部署LVS+keepalived
查看>>
曲线学习PyQt5方案一
查看>>
OpenCV学习】矩阵运算和操作2
查看>>
nginx+ffmpeg搭建rtmp转播rtsp流的flash服务器
查看>>
关于在arm裸板编程时使用printf问题的解决方法
查看>>
2015 上半年 JavaScript 使用统计数据
查看>>
《Python算法教程》——1.6 如果您感兴趣
查看>>
深度解析Java8 – AbstractQueuedSynchronizer的实现分析(下)
查看>>
SSH原理与运用(一):远程登录
查看>>
React组件: 提取图片颜色
查看>>
3D应用开发中的欧拉角和旋转矩阵
查看>>
RxJava2.0的初学者必备教程(九)
查看>>
记一次omi的项目之旅
查看>>
Android API级别、代号、发布时间及平台亮点整理
查看>>
LLDP(链路层发现协议)
查看>>