使用videoView来播放视频
zhuanzi :http://blog.csdn.net/jiahui524/article/details/7108241
大概步骤:
使用android的VideoView来播放一个视频,步骤是:
1,在xml中创建一个videoView,
2,在java中导入,然后创建一个MediaController控制条来控制。
3,利用videoView的setVideoPath来把打开的视频文件设置进去,如videoView.setVideoPath(videoFile.getAbsolutePath());
4,把videoView和MediaController关联起来,如
videoView.setMediaController(mediaController); mediaController.setMediaPlayer(videoView);
5,设置videoView.requestFocus(); videoView.start(); 既可以播放视频。
xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<VideoView
android:id="@+id/video"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<Button
android:id="@+id/btnShow"
android:text="show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/btnHide"
android:text="hide"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
java 文件:
/*package com.example.tstmediaplaycontrol;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v4.app.NavUtils;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}*/
package com.example.tstmediaplaycontrol;
import java.io.File;
import android.app.Activity;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.MediaController;
import android.widget.Toast;
import android.widget.VideoView;
public class MainActivity extends Activity {
private VideoView videoView;
private Button btnHide, btnShow;
MediaController mediaController;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFormat(PixelFormat.TRANSLUCENT);
setContentView(R.layout.activity_main);
videoView = (VideoView) this.findViewById(R.id.video);
btnShow = (Button) this.findViewById(R.id.btnShow);
btnHide = (Button) this.findViewById(R.id.btnHide);
// 使用这种方式创建MediaController将不会显示“快进”和“快退”两个按钮
// mediaController = new MediaController(this,false);
mediaController = new MediaController(this);
//File videoFile = new File("/mnt/sdcard/movie.3gp");
File videoFile = new File("/mnt/sdcard/vid320X240.3gp");
// 先判断这个文件是否存在
if (videoFile.exists()) {
System.out.println("文件存在");
videoView.setVideoPath(videoFile.getAbsolutePath());
System.out.println(videoFile.getAbsolutePath());
// 设置VideView与MediaController建立关联
videoView.setMediaController(mediaController);
// 设置MediaController与VideView建立关联
mediaController.setMediaPlayer(videoView);
// 让VideoView获取焦点
videoView.requestFocus();
// 开始播放
videoView.start();
} else {
Toast.makeText(this, "文件不存在", Toast.LENGTH_LONG).show();
}
btnShow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mediaController != null) {
// 使用0的话就一直显示直到调用hide()
mediaController.show(0);
}
}
});
btnHide.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mediaController != null) {
mediaController.hide();
}
}
});
}
}
VideoView
常用方法:
方法名称 | 描述 |
public void setVideoPath (String path) | 加载path路径的文件 |
public void setVideoURI (Uri uri) | 加载uri所对应的视频 |
public void start () | 开始 |
public void seekTo (int msec) | 定位 |
public void pause () | 暂停 |
public void stop() | 停止 |
public void setMediaController (MediaController controller) | 设置MediaController对象 |
关于MediaController类
这个类也是android.widget包下的,它是一个包含控件MediaPlayer多媒体播放的组件,它含有“播放”、暂停、”、“快倒”、“快进”和进步条的一个组件
构造方法
方法名称 | 描述 |
public MediaController (Context context, AttributeSet attrs) | 通过Context对象和AttributeSet对象来创建MediaController对象 |
public MediaController (Context context, boolean useFastForward) | 通过Context对象和指定是否允许用户控制进度。也就是是否有“快进”、“快退”按钮。如果设置为false就不会显示显示(如下图片一) |
public MediaController (Context context) | 通过Context来创建MediaController对象 |
常用方法
方法名称 | 描述 |
public void hide() | 设置隐藏MediaController |
public void show() | 设置显示MediaController |
public void show(int timeout) | 设置MediaController显示的时间以毫秒计算。如果设置为0则一直到调用hide()方法才隐藏 |
public void setMediaPlayer (MediaController.MediaPlayerControl player) | 设置MediaPlayer使之与要绑定的控件绑定在一起其参数是一个MediaController.MediaPlayerControl 静态接口的对象,(而VideoView是MediaController.MediaPlayerControl静态接口的子实现类,这就使得我们可以更好的控制我们的视频播放进度) |