VideoView
一、简介:
后面讲解SurfaceView。
VideoView将视频的显示和控制集于一身,它的用法和MediaPlayer很相似,因为VideoView只是做好了一个封装而已,它的背后仍然是MediaPlayer来对视频文件进行的控制。而且VideoView并不是万能的视频播放工具,只支持3gp和MP4格式的视频格式的播放,但如果只是用于播放一些游戏的片头动画,或者某个应用的视频宣传,使用VideoView还是绰绰有余的,但编写强大的视频播放器就不太现实了呢。
二、使用:
VideoView的使用非常简单,布局只需要添加VideoView组件,设置宽高即可,代码中,主要用到下面划红线的方法
注:不要忘了加权限,这里播放手机中存储的视频,需要读权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
常用的其他方法:
resume():将视频重头开始播放。
seekTo()
setVideoPath()
start()
isPlaying()
getDuration()释放资源:
在onDestroy中需要调研过年suspend()方法,将资源释放掉。
不过一般我们不使用VideoView来播放视频,会用到第三方的播放器
三、范例:
功能:播放SD卡下名称为my.3gp的视频
MediaView:
读SD卡的权限:
MediaPlayer和SurfaceView结合
这里介绍一下SurfaceView和View的区别:
View:
View必须由UI主线程去绘制。SurfaceView:
SurfaceView是自带绘制线程,独立于UI主线程之外;一些游戏界面,例如五子棋、飞机大战、贪吃蛇等可以用 SurfaceView来做,视频的播放也可以用 SurfaceView(此时它是独立的线程来绘制的视频界面。)
这里我们仅展示一下SurfaceView中视频播放这样一个小功能,和MediaPlayer相结合。
用法:
- 读权限:
- 用法:
1)布局中添加SurfaceView控件
2)其他是MediaPlayer的用法,设置资源地址,类型,唯一不同的是需要设置setdisplay,在SurfaceView上进行播放视频。
范例:
总代码:
public class MainActivity extends Activity {
private Button mButtonsurface;
private SurfaceView surface;
private MediaPlayer mediaPlayer;//全局变量,避免每次点击都创建新对象
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButtonsurface = (Button) findViewById(R.id.buttonsurface);
surface = (SurfaceView) findViewById(R.id.surfaceView);
mButtonsurface.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mediaPlayer == null) {
mediaPlayer = new MediaPlayer();
}
mediaPlayer.reset();
try {
//设置视频地址
mediaPlayer.setDataSource(Environment.getExternalStorageDirectory() + "/my.3gp");
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);//设置播放声音类型
mediaPlayer.setDisplay(surface.getHolder());//设置在surfaceView上播放
mediaPlayer.prepare();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();//准备需要一段时间,所以用监听
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
功能:点击按钮时,相应的视频在SurfaceView上进行播放。