制止一款简单的视频播放器

和上一篇博客中介绍的音乐播放器一样,制作视频播放器也是使用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"/>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值