视频播放器

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();
        }
    }
}

 

posted on 2015-12-28 16:57  jayhtt  阅读(104)  评论(0)    收藏  举报