`

Android之SurfaceView窗口/全屏播放

 
阅读更多

package com.FJICC.lzm;

import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.media.AudioManager;
import android.app.AlertDialog;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.MediaController;
import android.widget.TextView;
import android.widget.Toast;

public class multimedia_player2 extends Activity implements SurfaceHolder.Callback{


private MediaPlayer mMediaPlayer01;
private SurfaceView mSurfaceView01;
private SurfaceHolder mSurfaceHolder01;

private ImageButton mPlay;
private ImageButton mPause;
private ImageButton mReset;
private ImageButton mStop;

private boolean bIsPaused = false;
private boolean bIsReleased = true;
private boolean bIsReset = false;
private String strVideoPath = "";

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.multimedia_player2);



if(!checkSDCard())
{
/* 检测是否有SD卡*/
mMakeTextToast
(
getResources().getText(R.string.str_err_nosd).toString(),
true
);
};


getWindow().setFormat(PixelFormat.UNKNOWN);

/*获取用来显示视频SurfaceView */
mSurfaceView01 = (SurfaceView) findViewById(R.id.surfaceView1);



/* 获取SurfaceHolder控制 SurfaceView*/
mSurfaceHolder01 = mSurfaceView01.getHolder();
mSurfaceHolder01.addCallback(this);

/*默认视频分辨率 176x144*/
mSurfaceHolder01.setFixedSize(176,144);
//设置.....
mSurfaceHolder01.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

/*获取ImageButton的ID */
mPlay = (ImageButton) findViewById(R.id.imageButton_start);
mPause = (ImageButton) findViewById(R.id.imageButton_pause);
mReset = (ImageButton) findViewById(R.id.imageButton_reset);
mStop = (ImageButton) findViewById(R.id.imageButton_stop);

mPlay.setEnabled(true);//初始状态 开启播放按钮,其他的设置为false
mPause.setEnabled(false);
mReset.setEnabled(false);

/*测试用播放视频*/
strVideoPath = "file:///sdcard/DCIM/test.mp4";

mPlay.setOnClickListener(new ImageButton.OnClickListener()
{
public void onClick(View view)
{
/*启动Function */
if(checkSDCard())
{
if(bIsReleased == true){
showDialog(0);
playVideo(strVideoPath);
}
else if(bIsReset == true){
//mMediaPlayer01.start();
bIsReset = false;
}
mPlay.setEnabled(false);
mPause.setEnabled(true);
mReset.setEnabled(true);
}
}
});

/*暂停 */
mPause.setOnClickListener(new ImageButton.OnClickListener()
{
public void onClick(View view)
{
if(checkSDCard())
{
if (mMediaPlayer01 != null)
{
if(bIsReleased == false)
{
if(bIsPaused==false)
{
mMediaPlayer01.pause();
bIsPaused = true;
mMakeTextToast("pause",true);
// mTextView01.setText(R.string.str_pause);
}
else if(bIsPaused==true)
{
mMediaPlayer01.start();
bIsPaused = false;
mMakeTextToast("start",true);
// mTextView01.setText(R.string.str_play);
}
}
}
}
}
});

/*复位重播*/
mReset.setOnClickListener(new ImageButton.OnClickListener()
{
public void onClick(View view)
{
if(checkSDCard())
{
if(bIsReleased == false)
{
if (mMediaPlayer01 != null)
{

mMediaPlayer01.seekTo(0);//回到录像原点
// 如果是暂停状态回到原点,那么回到原点后还是暂停的,需要点击暂停键继续播放
//如果是播放的时候,点击复位播放,那么复位后自动是自动播放的。
}
}
}
}
});

/*关闭播放*/
mStop.setOnClickListener(new ImageButton.OnClickListener()
{
public void onClick(View view)
{
if(checkSDCard())
{
if (mMediaPlayer01 != null)
{
if(bIsReleased==false)
{
mMediaPlayer01.stop();
mMediaPlayer01.release();
bIsReleased = true;
// mMakeTextToast("["+mMediaPlayer01.toString()+"]",true);

mPlay.setEnabled(true);//回到初始状态 :开启播放按钮,其他的设置为false
mPause.setEnabled(false);
mReset.setEnabled(false);
}
}

}
}
});
}
/*播放视频函数*/
private void playVideo(String strPath)
{

//DisplayMetircs 类可以很方便的获取分辨率 获取窗口的分辨率
//这里获取窗口的大小
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

//设置Layout的参数
LayoutParams lp = mSurfaceView01.getLayoutParams();
lp.width = metrics.widthPixels/2;
lp.height =metrics.heightPixels/2;
mSurfaceView01.setLayoutParams(lp);

mMediaPlayer01 = new MediaPlayer();
mMediaPlayer01.setAudioStreamType(AudioManager.STREAM_MUSIC);


/* */
mMediaPlayer01.setDisplay(mSurfaceHolder01);

try
{
mMediaPlayer01.setDataSource(strPath);
}
catch (Exception e)
{
// TODO Auto-generated catch block
mMakeTextToast("setDataSource Exceeption:"+e.toString(),true);
//mTextView01.setText("setDataSource Exceeption:"+e.toString());
e.printStackTrace();
}

try
{
mMediaPlayer01.prepare();
}
catch (Exception e)
{
// TODO Auto-generated catch block
mMakeTextToast("setDataSource Exceeption:"+e.toString(),true);
//mTextView01.setText("prepare Exceeption:"+e.toString());
e.printStackTrace();
}

mMediaPlayer01.start();
bIsReleased = false;
//mTextView01.setText(R.string.str_play);
mMediaPlayer01.setOnCompletionListener(new MediaPlayer.OnCompletionListener()
{
@Override
public void onCompletion(MediaPlayer arg0)
{
// TODO Auto-generated method stub
mMakeTextToast("stop",true);
// mTextView01.setText(R.string.str_stop);

bIsPaused = true;//视频播放完毕了,就自动回到了0位置,并停止了。点击停止/继续 即可播放。
}
});
}

@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub

}

@Override
public void surfaceCreated(SurfaceHolder arg0) {
// TODO Auto-generated method stub

//DisplayMetircs 类可以很方便的获取分辨率 获取窗口的分辨率
//这里获取 窗口 的分辨率大小
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

//设置Layout的参数
LayoutParams lp = mSurfaceView01.getLayoutParams();
lp.width = metrics.widthPixels/2;
lp.height =metrics.heightPixels/2;
mSurfaceView01.setLayoutParams(lp);
}

@Override
@Deprecated
protected Dialog onCreateDialog(int id) {
// TODO Auto-generated method stub

final View v = View.inflate(this, R.layout.multimedia_set, null);
final EditText videoPath = (EditText) v.findViewById(R.id.videoPath);
switch(id){
case 0:
{
Dialog dialog0 = new AlertDialog.Builder(this)
.setTitle("播放文件")
.setView(v).setMessage("请输入文件名:")
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// 播放本地视频
//视频文件放置在SD卡下的DCIM目录下,这里设置为默认路径
//resetVideo();//重头播放,这个可以在播放完了后,执行,就可以实现循环播放了
strVideoPath= "file:///sdcard/DCIM/"+videoPath.getText().toString();//此时只需输入文件名称如:test.3gp;
setTitle("Playing" + strVideoPath);
}
}).create();
return dialog0;
}
default:
return null;

}

}
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
// TODO Auto-generated method stub

}

private boolean checkSDCard()
{
/* */
if(android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
{
return true;
}
else
{
return false;
}
}

public void mMakeTextToast(String str, boolean isLong)
{
if(isLong==true)
{
Toast.makeText(multimedia_player2.this, str, Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(multimedia_player2.this, str, Toast.LENGTH_SHORT).show();
}
}

//返回上一级Activity界面
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();
Intent i =new Intent();
i.setClass(multimedia_player2.this,multimedia.class);
startActivity(i);
finish();
}


}

 

 

 

 

<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/android2_bg9"
>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:orientation="vertical" >

<SurfaceView
android:id="@+id/surfaceView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="0dp" />

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" >

<ImageButton
android:id="@+id/imageButton_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/paly1" />

<ImageButton
android:id="@+id/imageButton_pause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/pause1" />

<ImageButton
android:id="@+id/imageButton_reset"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/reset1" />

<ImageButton
android:id="@+id/imageButton_stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/stop" />

</LinearLayout>
</LinearLayout>

</RelativeLayout>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics