activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<EditText
android:id="@+id/video_path_et"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="click"
android:text="/sdcard/oppo.mp4" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/playBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click"
android:text="播放" />
<Button
android:id="@+id/pauseBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click"
android:text="暂停" />
<Button
android:id="@+id/stopBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click"
android:text="停止" />
<Button
android:id="@+id/replayBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click"
android:text="重播" />
</LinearLayout>
<SeekBar
android:id="@+id/seekBar"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<SurfaceView
android:id="@+id/sv"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center_horizontal" />
</LinearLayout>
MainActivity
package visizen.com.videoplayer;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.SeekBar;
import android.widget.Toast;
import java.io.File;
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends AppCompatActivity {
private EditText video_path_et;
private MediaPlayer mediaPlayer;
private SurfaceView sv;
private Button pauseBtn;
//记录当前播放位置
private int currentPosition;
//拖动条
private SeekBar sb;
private Timer timer;
private TimerTask timerTask;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
video_path_et= (EditText) findViewById(R.id.video_path_et);
sv= (SurfaceView) findViewById(R.id.sv);
pauseBtn= (Button) findViewById(R.id.pauseBtn);
sb= (SeekBar) findViewById(R.id.seekBar);
sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
if (mediaPlayer!=null){
mediaPlayer.seekTo(sb.getProgress());
}
}
});
sv.getHolder().addCallback(new SurfaceHolder.Callback() {
/**
* holder被创建的时候调用
* @param holder
*/
@Override
public void surfaceCreated(SurfaceHolder holder) {
if (currentPosition!=0){
play();
mediaPlayer.seekTo(currentPosition);
}
}
/**
* holder大小改变的时候调用
* @param holder
* @param format
* @param width
* @param height
*/
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
/**
* holder销毁的时候调用
* @param holder
*/
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if (mediaPlayer!=null&&mediaPlayer.isPlaying()){
currentPosition = mediaPlayer.getCurrentPosition();
stop();
}
}
});
}
public void click(View v){
switch (v.getId()){
case R.id.playBtn:
play();
break;
case R.id.pauseBtn:
pause();
break;
case R.id.stopBtn:
stop();
break;
case R.id.replayBtn:
replay();
break;
}
}
/**
* 重播
*/
private void replay() {
if(mediaPlayer!=null&&mediaPlayer.isPlaying()){
mediaPlayer.seekTo(0);
}else {
play();
}
}
/**
* 停止
*/
private void stop() {
if(mediaPlayer!=null&&mediaPlayer.isPlaying()){
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer=null;
if(timer!=null&&timerTask!=null){
timer.cancel();
timerTask.cancel();
timer=null;
timerTask=null;
}
}
}
/**
* 暂停
*/
private void pause() {
if(mediaPlayer!=null&&mediaPlayer.isPlaying()){
mediaPlayer.pause();
pauseBtn.setText("继续");
return;
}
if(mediaPlayer!=null){
if(pauseBtn.getText().equals("继续")){
mediaPlayer.start();
pauseBtn.setText("暂停");
return;
}
}
}
/**
* 播放
*/
private void play(){
String path=video_path_et.getText().toString();
File file=new File(path);
if (file.exists()&&file.length()>0){
mediaPlayer=new MediaPlayer();
mediaPlayer.reset();//回到初始状态
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
//将影片以SurfaceView播放
mediaPlayer.setDisplay(sv.getHolder());
try {
mediaPlayer.setDataSource(path);
mediaPlayer.prepare();
mediaPlayer.start();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this,"播放失败!",Toast.LENGTH_SHORT).show();
}
sb.setMax(mediaPlayer.getDuration());
timer=new Timer();
timerTask=new TimerTask() {
@Override
public void run() {
int p = mediaPlayer.getCurrentPosition();
sb.setProgress(mediaPlayer.getCurrentPosition());
}
};
//每秒执行一次
timer.schedule(timerTask,0,1000);
}else{
Toast.makeText(this,"文件不存在!",Toast.LENGTH_SHORT).show();
}
}
}