zoukankan      html  css  js  c++  java
  • Android开发之MediaPlayer和SurfaceView组成视频播放器

    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     @Override
    13     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             @Override
    24             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             @Override
    36             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             @Override
    56             public void surfaceChanged(SurfaceHolder holder, int format,
    57                     int width, int height) {
    58             }
    59         });
    60     }
    61 }
  • 相关阅读:
    本地图文直接复制到文本编辑器中
    本地图文直接复制到富文本编辑器中
    本地多张图片直接复制到富文本编辑器中
    能粘贴Word 内容(含图片)的富文本编辑器
    能粘贴Word 内容(含图片)的文本编辑器
    js+WebUploader分片上传大文件
    js+web分片上传大文件
    js+前端分片上传大文件
    Java学习——方法中传递参数分简单类型与复杂类型(引用类型)
    线段树练习
  • 原文地址:https://www.cnblogs.com/liyiran/p/5098412.html
Copyright © 2011-2022 走看看