使用SurfaceView和MedioPlayer播放视频

来源:互联网 发布:淘宝bug刷话费 编辑:程序博客网 时间:2024/05/23 01:19

添加权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

布局:

/SurfaceViewPlayVideo/res/layout/activity_main.xml

<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" >    <SurfaceView        android:id="@+id/surfaceView"        android:layout_width="match_parent"        android:layout_height="360dp" />    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:gravity="center_horizontal"        android:orientation="horizontal" >        <ImageButton            android:id="@+id/play"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:src="@drawable/play" />        <ImageButton            android:id="@+id/pause"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:src="@drawable/pause" />        <ImageButton            android:id="@+id/stop"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:src="@drawable/stop" />    </LinearLayout></RelativeLayout>
/SurfaceViewPlayVideo/src/com/lxm/surfaceviewplayvideo/MainActivity.java
<pre name="code" class="java">package com.lxm.surfaceviewplayvideo;import android.app.Activity;import android.media.AudioManager;import android.media.MediaPlayer;import android.os.Bundle;import android.os.Environment;import android.util.DisplayMetrics;import android.view.Menu;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;import android.view.View.OnClickListener;import android.view.WindowManager;import android.widget.ImageButton;//注意这里别导错import android.widget.RelativeLayout.LayoutParams;public class MainActivity extends Activity implements OnClickListener {ImageButton play, pause, stop;SurfaceView surfaceView;MediaPlayer mPlayer;int position;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);play = (ImageButton) findViewById(R.id.play);pause = (ImageButton) findViewById(R.id.pause);stop = (ImageButton) findViewById(R.id.stop);play.setOnClickListener(this);pause.setOnClickListener(this);stop.setOnClickListener(this);mPlayer = new MediaPlayer();surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView);surfaceView.getHolder().setKeepScreenOn(true);surfaceView.getHolder().addCallback(new SurfaceListener());}private class SurfaceListener implements SurfaceHolder.Callback{@Overridepublic void surfaceCreated(SurfaceHolder holder) {try {if (position > 0){play();// 并直接从指定位置开始播放mPlayer.seekTo(position);position = 0;}} catch (Exception e) {e.printStackTrace();}}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {// TODO Auto-generated method stub}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {// TODO Auto-generated method stub}}@Overridepublic void onClick(View v) {try {switch (v.getId()) {// 播放按钮被单击case R.id.play:play();break;// 暂停按钮被单击case R.id.pause:if (mPlayer.isPlaying()) {mPlayer.pause();} else {mPlayer.start();}break;// 停止按钮被单击case R.id.stop:if (mPlayer.isPlaying())mPlayer.stop();break;}} catch (Exception e) {e.printStackTrace();}}private void play() throws Exception{mPlayer.reset();mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);String mp4Path = Environment.getExternalStorageDirectory()+"/mv";  mPlayer.setDataSource(mp4Path+"/Roar.mp4");// 把视频画面输出到SurfaceViewmPlayer.setDisplay(surfaceView.getHolder()); mPlayer.prepare();// 获取窗口管理器WindowManager wManager = getWindowManager();DisplayMetrics metrics = new DisplayMetrics();// 获取屏幕大小wManager.getDefaultDisplay().getMetrics(metrics);// 设置视频保持纵横比缩放到占满整个屏幕surfaceView.setLayoutParams(new LayoutParams(metrics.widthPixels, mPlayer.getVideoHeight() * metrics.widthPixels/ mPlayer.getVideoWidth()));mPlayer.start();}@Overrideprotected void onPause() {if (mPlayer.isPlaying()){// 保存当前的播放位置position = mPlayer.getCurrentPosition();mPlayer.stop();}super.onPause();}@Overrideprotected void onDestroy() {// 停止播放if (mPlayer.isPlaying()) mPlayer.stop();// 释放资源mPlayer.release();super.onDestroy();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}


源码下载

以上的代码来自李刚老师的疯狂Android讲义。

0 0
原创粉丝点击