和上一篇博客中介绍的音乐播放器一样,制作视频播放器也是使用MediaPlayer,视频播放器除了使用MediaPlayer之外还需要在布局文件中添加一个SurfaceView组件
视频播放器的展示效果如下
实现方式:
第一步:使用Android Studio创建一个Android工程,并且修改activity_main.xml文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.fyt.playvideao.MainActivity">
<SurfaceView
android:id="@+id/sv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
第二步:修改MainActivity.java文件
package com.fyt.playvideao;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.app.Activity;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
public class MainActivity extends Activity {
private MediaPlayer player;
//用于记录视频的播放进度
static int currentPosition;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获得布局文件上的surfaceview控件
SurfaceView sv = (SurfaceView) findViewById(R.id.sv);
//拿到surfaceview的控制器
final SurfaceHolder sh = sv.getHolder();
//为suffaceview添加回调
sh.addCallback(new Callback() {
//surfaceView销毁时调用
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
//每次surfaceview销毁时,同时停止播放视频
if(player != null) {
//获得视频的播放进度
currentPosition = player.getCurrentPosition();
//停止播放视频
player.stop();
//释放创建好的MediaPlayer对象
player.release();
//将MediaPlayer对象置为null
player = null;
}
}
//surfaceView创建时调用
@Override
public void surfaceCreated(SurfaceHolder holder) {
//每次surfaceView创建时才去播放视频
if(player == null) {
//创建媒体播放器对象
player = new MediaPlayer();
//重置媒体播放器
player.reset();
try {
//设置视频的路径
player.setDataSource("sdcard/2.3gp");
//设置surfaceview控制器
player.setDisplay(sh);
//重置媒体播放器
player.prepare();
//开始使用媒体播放器播放视频
player.start();
//设置从上次的播放位置开始博客
player.seekTo(currentPosition);
} catch (Exception e) {
e.printStackTrace();
}
}
}
//surfaceView结构改变时调用
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
});
}
}最后一步:在配置文件中添加一条读取SD卡的权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

被折叠的 条评论
为什么被折叠?



