多媒体(视频播放器)Mediaplayer+SurfaceView+Seekbar

来源:互联网 发布:网络人头像 编辑:程序博客网 时间:2024/05/22 03:37

这个视频播放器是利用Mediaplayer比较复杂的,因为我上一篇音频播放
写的差不多了,只需要加上SurfaceView。这个SurfaceView是用来展示Mediaplayer捕捉到的画面的。

1,添加访问内存卡的权限

    <!--读取内存卡的权限-->    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>

2,main_activity.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:id="@+id/activity_main"    android:layout_width="match_parent" android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.zking.hzg_android_26_playmusic.MainActivity">    <SurfaceView        android:layout_width="match_parent"        android:layout_height="300dp"        android:id="@+id/sv_surfaceview"/>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content">    <SeekBar        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_weight="1"        android:id="@+id/seekBar" />    <ImageButton        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:src="@android:drawable/ic_media_play"        android:id="@+id/iv_main_imageview"        android:onClick="isPlay"/>    </LinearLayout></LinearLayout>

3,MainActivity.java

package com.zking.hzg_android_26_playmusic;import android.media.AudioManager;import android.media.MediaPlayer;import android.net.Uri;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.SurfaceView;import android.view.View;import android.widget.ImageButton;import android.widget.ImageView;import android.widget.SeekBar;import android.widget.Toast;import java.io.IOException;public class MainActivity extends AppCompatActivity {    private ImageView imageView;//    private MediaPlayer mediaplayer;    private SeekBar seekBar;    private MediaPlayer mediaplayer;    private ImageButton imageButton;    private SurfaceView sv_surfaceview;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        seekBar = (SeekBar) findViewById(R.id.seekBar);        sv_surfaceview = (SurfaceView) findViewById(R.id.sv_surfaceview);        //设置进度条的监听        seekBar.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) {                //获取拖动后的位置                int progress=seekBar.getProgress();                mediaplayer.seekTo(progress);            }        });    }    public void isPlay(View view )throws IOException {        imageButton = (ImageButton) view;        if(mediaplayer==null){            //播放应用程序内的音频文件            //mediaplayer = MediaPlayer.create(MainActivity.this, R.raw.love);            /*            播放内存卡内的音频文件             */            mediaplayer = new MediaPlayer();            //设置音频流的类型            mediaplayer.setAudioStreamType(AudioManager.STREAM_MUSIC);mediaplayer.setDataSource(MainActivity.this, Uri.parse("file://mnt/sdcard/Movies/m.mp4"));            //准备一下(内存卡)            mediaplayer.prepare();                    //将媒体播放器捕捉的画面展示到SurfaceView                    mediaplayer.setDisplay(sv_surfaceview.getHolder());                    mediaplayer.start();                    imageButton.setImageResource(android.R.drawable.ic_media_pause);                    //获取音乐的播放时长                    int durction= mediaplayer.getDuration();                    //设置进度条的最大值:音乐的时长                    seekBar.setMax(durction);                    new MyThread().start();        }        else if(mediaplayer.isPlaying()){            mediaplayer.pause();            imageButton.setImageResource(android.R.drawable.ic_media_play);        }        else {            mediaplayer.start();            imageButton.setImageResource(android.R.drawable.ic_media_pause);        }    }    class MyThread extends Thread{        @Override        public void run() {            super.run();            while(seekBar.getProgress()<=seekBar.getMax()){                //获取音乐当前播放位置               int current=mediaplayer.getCurrentPosition();                seekBar.setProgress(current);            }        }    }}
0 0