SurfaceView+MediaPlayer视频播放并用SharedPreferences实现暂停功能

来源:互联网 发布:如何将mac文件导入u盘 编辑:程序博客网 时间:2024/06/04 08:15

SurfaceView是视图(View)的继承类,这个视图里内嵌了一个专门用于绘制的surface。我们可以控制这个surface的格式和尺寸。SurfaceView控制这个surface绘制的位置。surface类直接继承Object,对应了一块屏幕缓冲区,每个窗口window对应一个Surface,任何View都是画在Surface上的,传统的view共享一块屏幕缓冲区。


MediaPlayer包含了Audio和video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlayer实现的。
MediaPlayer在底层是基于OpenCore(PacketVideo)的库实现的,为了构建一个MediaPlayer程序,上层还包含了进程间通讯等内容,这种进程间通讯的基础是Android基本库中的Binder机制。


SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置


下面是布局代码:

<?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.example.surfaceview_video.MainActivity">    <SurfaceView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/surfaceView"        android:layout_centerVertical="true"        android:layout_centerHorizontal="true"/></RelativeLayout>


MainActivity代码,其中多媒体数据源,为博主虚拟机sdcard中数据的路径,请自行设置数据源



package com.example.surfaceview_video;import android.content.SharedPreferences;import android.media.MediaPlayer;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.SurfaceHolder;import android.view.SurfaceView;import java.io.IOException;public class MainActivity extends AppCompatActivity {    private SurfaceView mSurfaceView;    private MediaPlayer mediaPlayer;    private SharedPreferences sp;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //初始化控件        mSurfaceView = (SurfaceView) findViewById(R.id.surfaceView);        //建立sharedPreferences对象         sp= getSharedPreferences("config", MODE_PRIVATE);        //创建Mediaplayer的对象        mediaPlayer = new MediaPlayer();        try {            //设置多媒体类的数据源(可以播放音乐或视频)            mediaPlayer.setDataSource("/storage/emulated/0/Download/oppo.3gp");            //让多媒体对象做好播放的准备            mediaPlayer.prepare();        } catch (IOException e) {            e.printStackTrace();        }        //获取SurfaceView的控制器        final SurfaceHolder holder = mSurfaceView.getHolder();        //设置对SurfaceView对象的监听        holder.addCallback(new SurfaceHolder.Callback() {            @Override//surfaceView创建时执行            public void surfaceCreated(SurfaceHolder surfaceHolder) {                //指定多媒体对象用哪个控件播放视频资源                mediaPlayer.setDisplay(holder);                //获取之前存放的位置,通过sp                int config = sp.getInt("config",0);                //让MediaPlayer根据这个进度进行播放                mediaPlayer.seekTo(config);                //使用MediaPlayer播放音乐                mediaPlayer.start();            }            @Override//surfaceView被改变的时候            public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {            }            @Override//surfaceView被销毁时执行            public void surfaceDestroyed(SurfaceHolder surfaceHolder) {                //当多媒体对象存在时,关闭MediaPlayer对象,释放资源的逻辑操作                if (mediaPlayer != null){                    //把记录下来当前播放的位置                    int currentPosition = mediaPlayer.getCurrentPosition();                    //把记录下来的位置保存到sp下,先得到一个sp的编辑器,再根据数据存储的类型把数据存到文件里进行提交                    sp.edit().putInt("config",currentPosition).commit();                    //关闭MediaPlayer对象                    mediaPlayer.stop();                    //释放MediaPlayer资源                    mediaPlayer.release();                }            }        });    }}

1 0
原创粉丝点击