基于VideoView实现视频播放文件切换
2010-03-01 18:51
886 查看
VideoView 是android 系统提供的一个媒体播放显示和控制的控件。其结构层次如下:
extends SurfaceView
implements MediaController.MediaPlayerControl
其中SurfaceView
为显示提供支持,MediaPlayerControl则为媒体控制提供了支持。
在eclair 中播放视频文件时,MediaPlayerControl 的进度条滑块,有时会显示不完整。可以通过修改其
布局描文件frameworks/base/core/res/res/layout/media_controller.xml,来达到理想的效果。
这里基于VideoView 实现了一个MovieView,它支持上一首、下一首的视频播放功能。下面是其主要代码:
public class MovieView extends Activity implements
MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener,
MediaPlayer.OnPreparedListener
{
@Override
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.movie_view);
mVideoView = (VideoView) findViewById(R.id.surface_view);
Uri uri = getIntent().getData();
mCurrent = getIntent().getIntExtra("start", 0);
MakeCursor();
mVideoView.setOnErrorListener(this);
mVideoView.setOnCompletionListener(this);
mVideoView.setOnPreparedListener(this);
mVideoView.setVideoURI(uri);
mMediaController = new MediaController(this, false);
mMediaController.setPrevNextListeners(mNextListener, mPrevListener);
mVideoView.setMediaController(mMediaController);
mVideoView.start();
}
private void MakeCursor() {
String[] cols = new String[] {
MediaStore.Video.Media._ID,
MediaStore.Video.Media.TITLE,
MediaStore.Video.Media.DATA,
MediaStore.Video.Media.MIME_TYPE,
MediaStore.Video.Media.ARTIST
};
ContentResolver resolver = getContentResolver();
if (resolver == null) {
System.out.println("resolver = null");
} else {
String mSortOrder = MediaStore.Video.Media.TITLE + " COLLATE UNICODE";
String mWhereClause = MediaStore.Video.Media.TITLE + " != ''";
mCursor = resolver.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
cols, mWhereClause , null, mSortOrder);
}
}
private View.OnClickListener mNextListener = new View.OnClickListener() {
public void onClick(View v) {
mCurrent = (mCurrent + 1) % mCursor.getCount();
mCursor.moveToPosition(mCurrent);
long id = mCursor.getLong(0);
Uri uri= ContentUris.withAppendedId(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, id);
mVideoView.setVideoURI(uri);
mVideoView.start();
}
}
private View.OnClickListener mPrevListener = new View.OnClickListener() {
public void onClick(View v) {
/*get prev uri*/
mVideoView.setVideoURI(uri);
mVideoView.start();
}
}
@Override
public void onPause() {
super.onPause();
}
public boolean onError(MediaPlayer player, int arg1, int arg2) {
}
public void onCompletion(MediaPlayer mp) {
}
public void onPrepared(MediaPlayer mp) {
}
}
extends SurfaceView
implements MediaController.MediaPlayerControl
java.lang.Object | |||
↳ | android.view.View | ||
↳ | android.view.SurfaceView | ||
↳ | android.widget.VideoView |
为显示提供支持,MediaPlayerControl则为媒体控制提供了支持。
在eclair 中播放视频文件时,MediaPlayerControl 的进度条滑块,有时会显示不完整。可以通过修改其
布局描文件frameworks/base/core/res/res/layout/media_controller.xml,来达到理想的效果。
这里基于VideoView 实现了一个MovieView,它支持上一首、下一首的视频播放功能。下面是其主要代码:
public class MovieView extends Activity implements
MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener,
MediaPlayer.OnPreparedListener
{
@Override
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.movie_view);
mVideoView = (VideoView) findViewById(R.id.surface_view);
Uri uri = getIntent().getData();
mCurrent = getIntent().getIntExtra("start", 0);
MakeCursor();
mVideoView.setOnErrorListener(this);
mVideoView.setOnCompletionListener(this);
mVideoView.setOnPreparedListener(this);
mVideoView.setVideoURI(uri);
mMediaController = new MediaController(this, false);
mMediaController.setPrevNextListeners(mNextListener, mPrevListener);
mVideoView.setMediaController(mMediaController);
mVideoView.start();
}
private void MakeCursor() {
String[] cols = new String[] {
MediaStore.Video.Media._ID,
MediaStore.Video.Media.TITLE,
MediaStore.Video.Media.DATA,
MediaStore.Video.Media.MIME_TYPE,
MediaStore.Video.Media.ARTIST
};
ContentResolver resolver = getContentResolver();
if (resolver == null) {
System.out.println("resolver = null");
} else {
String mSortOrder = MediaStore.Video.Media.TITLE + " COLLATE UNICODE";
String mWhereClause = MediaStore.Video.Media.TITLE + " != ''";
mCursor = resolver.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
cols, mWhereClause , null, mSortOrder);
}
}
private View.OnClickListener mNextListener = new View.OnClickListener() {
public void onClick(View v) {
mCurrent = (mCurrent + 1) % mCursor.getCount();
mCursor.moveToPosition(mCurrent);
long id = mCursor.getLong(0);
Uri uri= ContentUris.withAppendedId(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, id);
mVideoView.setVideoURI(uri);
mVideoView.start();
}
}
private View.OnClickListener mPrevListener = new View.OnClickListener() {
public void onClick(View v) {
/*get prev uri*/
mVideoView.setVideoURI(uri);
mVideoView.start();
}
}
@Override
public void onPause() {
super.onPause();
}
public boolean onError(MediaPlayer player, int arg1, int arg2) {
}
public void onCompletion(MediaPlayer mp) {
}
public void onPrepared(MediaPlayer mp) {
}
}
相关文章推荐
- 利用VideoView简单实现视频播放 包括 横竖屏切换 声音 亮度 暂停
- 如何实现videoView的自动连续播放视频文件
- Android VideoView播放 项目中的 视频文件 自动横屏 全屏播放
- 使用VideoView播放视频文件
- VideoView中实现循环播放视频的问题
- 用VideoView实现视频的无缝连续播放
- Andriod 学习 VideoView + MediaController 来实现播放视频
- VideoView播放SD卡上指定视频文件
- Android高级控件(四)——VideoView 实现引导页播放视频欢迎效果,超级简单却十分的炫酷
- Android 通过VideoView+MediaPlayer实现视频播放
- 使用videoview实现播放视频
- Android使用VideoView和MediaController播放网络视频(包括横竖排切换的处理)
- VideoView实现视频无缝连续播放
- Android视频播放框架Vitamio集成及使用MediaPlayer+SurfaceView、VideoView+MediaController实现播放网络视频
- android视频播放简单实现示例(VideoView&MediaPlayer)
- Android中VideoView及SurfaceView视频播放实现
- TextureView替换VideoView实现视频播放
- mediaplayer+surfaceview实现视频播放以及全屏窗口切换
- 基于jiecaovideo实现类似腾讯新闻视频item不可见小屏播放,item可见时小屏切换到itemy
- Android VideoView实现视频播放