Android内置的VideoView类可以快速制作一个系统播放器,VideoVies主要用来显示一个视频文件,我们先来看看VidewView类的一些基本方法。

VideoView类的常用方法

getBufferPercentage 得到缓冲的百分比
getCurrentPosition 得到当前播放的位置
getDuration 得到视频文件的时间
isPlaying 是否正在播放
pause暂停
resolveAdjustedSize 调整视频显示大小
seekTo 指定播放位置
setMediaController设置播放控制模式(播放进度条)

setOnCompleteionListener 当媒体文件播放完成时出发时间

setOnErrorListener错误监听
setVideoPath 设置视频源路径
setVideoPath 设置视频源地址
start 开始播放

有了这些方法,我们要播放一个视频文件就很简单了,首先在布局文件中创建VideoView布局,并且创建几个按钮来实现对视频的操作。当我们点击“装载”按钮时,将指定视频文件的饿路径,如下列代码所示:

/* 设置路径*/videoView.setVideoPath("/sdcard/test.mp4");/* 设置模式-播放进度条*/videoView.setMediaController(new MediaController(Activity01.this));videoView.requestFocus();

装载之后便可以通过start,pause方法来播放和暂停,具体实现见代码清单:

package com.yarin.android.Examples_07_03;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.MediaController;import android.widget.VideoView;public class Activity01 extends Activity{/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);/* 创建VideoView对象 */final VideoView videoView = (VideoView) findViewById(R.id.VideoView01);/* 操作播放的三个按钮 */Button PauseButton = (Button) this.findViewById(R.id.PauseButton);Button LoadButton = (Button) this.findViewById(R.id.LoadButton);Button PlayButton = (Button) this.findViewById(R.id.PlayButton);/* 装载按钮事件 */LoadButton.setOnClickListener(new OnClickListener() {public void onClick(View arg0){/* 设置路径 */videoView.setVideoPath("/sdcard/test.mp4");/* 设置模式-播放进度条 */videoView.setMediaController(new MediaController(Activity01.this));videoView.requestFocus();}});/* 播放按钮事件 */PlayButton.setOnClickListener(new OnClickListener() {public void onClick(View arg0){/* 开始播放 */videoView.start();}});/* 暂停按钮 */PauseButton.setOnClickListener(new OnClickListener() {public void onClick(View arg0){/* 暂停 */videoView.pause();}});}}

扩展学习

上面我们通过系统自带的VideoView播放了一个MP4视频文件,但是我们知道VideoView类实际上继承自SurfaceView类,而且实现了MediaController.MediaPlayerControl接口。下面我们用SurfaceView来实现一个视频播放器。,当然需要通过SurfaceHolder来控制SurfaceView,因此需要通过getHolder方法来德奥SurfaceView的SurfaceHolder对象,具体代码如下:

package com.yarin.android.Examples_07_04;import android.app.Activity;import android.media.AudioManager;import android.media.MediaPlayer;import android.media.MediaPlayer.OnBufferingUpdateListener;import android.media.MediaPlayer.OnCompletionListener;import android.os.Bundle;import android.util.Log;import android.view.SurfaceHolder;import android.view.SurfaceView;public class Activity01 extends Activity implements OnBufferingUpdateListener, OnCompletionListener, MediaPlayer.OnPreparedListener, SurfaceHolder.Callback{private static final StringTAG= "Activity01";private intmVideoWidth;private intmVideoHeight;private MediaPlayermMediaPlayer;private SurfaceViewmPreview;private SurfaceHolderholder;private Stringpath;public void onCreate(Bundle icicle){super.onCreate(icicle);setContentView(R.layout.main);mPreview = (SurfaceView) findViewById(R.id.surface);/* 得到SurfaceHolder对象 */holder = mPreview.getHolder();/* 设置回调函数 */holder.addCallback(this);/* 设置风格 */holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);}private void playVideo(){try{path = "/sdcard/test.mp4";/* 构建MediaPlayer对象 */mMediaPlayer = new MediaPlayer();/* 设置媒体文件路径 */mMediaPlayer.setDataSource(path);/* 设置通过SurfaceView来显示画面 */mMediaPlayer.setDisplay(holder);/* 准备 */mMediaPlayer.prepare();/* 设置事件监听 */mMediaPlayer.setOnBufferingUpdateListener(this);mMediaPlayer.setOnCompletionListener(this);mMediaPlayer.setOnPreparedListener(this);mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);}catch (Exception e){Log.e(TAG, "error: " + e.getMessage(), e);}}public void onBufferingUpdate(MediaPlayer arg0, int percent){Log.d(TAG, "onBufferingUpdate percent:" + percent);}public void onCompletion(MediaPlayer arg0){Log.d(TAG, "onCompletion called");}public void onPrepared(MediaPlayer mediaplayer){Log.d(TAG, "onPrepared called");mVideoWidth = mMediaPlayer.getVideoWidth();mVideoHeight = mMediaPlayer.getVideoHeight();if (mVideoWidth != 0 && mVideoHeight != 0){/* 设置视频的宽度和高度 */holder.setFixedSize(mVideoWidth, mVideoHeight);/* 开始播放 */mMediaPlayer.start();}}/* 更改时出发的事件 */public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j, int k){Log.d(TAG, "surfaceChanged called");}/* 销毁 */public void surfaceDestroyed(SurfaceHolder surfaceholder){Log.d(TAG, "surfaceDestroyed called");}/* 当SurfaceHolder创建时触发 */public void surfaceCreated(SurfaceHolder holder){Log.d(TAG, "surfaceCreated called");playVideo();}/* 销毁 */@Overrideprotected void onDestroy(){super.onDestroy();if (mMediaPlayer != null){mMediaPlayer.release();mMediaPlayer = null;}}}

更多相关文章

  1. Pycharm安装PyQt5的详细教程
  2. android EditText设置不可写
  3. android“设置”里的版本号
  4. 在Fragment中设置控件点击方法,执行失败。
  5. Android(安卓)闹钟管理类的使用
  6. Android设置通知栏/状态栏透明改变通知栏颜色和app最上部分颜色
  7. android 设置中划线 下划线等
  8. Andorid Dialog 示例【慢慢更新】
  9. Android--SoLoader,android动态加载so库

随机推荐

  1. Android最佳实践(一)
  2. Android(安卓)安全类知识导读
  3. Android(安卓)UI布局之区分 android:grav
  4. 【Android】Android布局文件的一些属性值
  5. Android(安卓)设置Activity窗体 不显示标
  6. Android最佳实践(七)之AppCompat 23.2.0
  7. 【062】Android(安卓)开发入门学习
  8. Android学习系列--索引贴
  9. android 布局属性
  10. Android(安卓)TextEdit 文本框设置