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>
相关推荐
SurfaceView+MediaPlayer视频播放,包含小窗口和全屏播放
android之surfaceview学习示例
Android圆形相机预览窗口,圆形SurfaceView
android之surfaceview游戏开发
这是在上网收集的,能够截取当前Activity中surfaceView中图片。本人亲测可以通过。
Android下使用SurfaceView播放视频文件,详细参见博客:http://www.cnblogs.com/plokmju/p/android_SurfaceView.html
Android中使用surfaceview开发的Camera相机,内容含有注释,非常清楚
Android的SurfaceView实现图片缩放、滑动,网上资源不多,目前还有些问题,仅供参考。
android-SurfaceView 游戏测试Demo
Android中SurfaceView的使用
Android双SurfaceView底部拍照,顶部绘图,当SurfaceHolder对象的类型设置为SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS时就只能拍照不能绘制了。为了既能通过SurfaceView拍照又能在上面绘制图形,可以通过双...
surfaceview+mediaplayer 实现视频播放和动态设置view的宽高和全屏窗口切换。播放的是没m3u8的视频,大家有什么问题也可以回复。
android使用双缓冲辨析及surfaceview使用例子
Android SurfaceView 实现实时显示摄像头视频,详见博客:https://blog.csdn.net/qq_30297763/article/details/90241102
Android SurfaceView 实现实时显示摄像头视频,详见博客:https://blog.csdn.net/qq_30297763/article/details/90241102
安卓Android源码——安卓Android使用SurfaceView实现墨迹天气的风车效果.zip
android View、SurfaceView Demo - 对应博客:http://blog.csdn.net/amoscxy/article/details/77480655
Android使用SurfaceView实现墨迹天气的风车效果 http://blog.csdn.net/xyz_lmn/article/details/20483709
android中的surfaceview示例源码下载,Android SurfaceView在游戏开发中使用想当广泛,SurfaceView对于画面的控制有着更大的自由度,它不像View那样要用handler来更新,但是网上关于 SurfaceView使用这方面的参考...
android中surfaceview控件的使用,详细介绍使用的注意点,和过程