由于项目需求,项目主页面有很多个page页面,每个page页面中都有一个VideoView用于播放视频,写次demo用来练手。
1、上效果图:
由于4个page页面的内容一样,所以看起来不好区分,但是功能还是实现了,将就着吧。
2、分析代码:
定义MainActivity.java内部的全局变量:
ViewPager mViewPager;
MyPagerAdapter mAdapter;
/*** 本地视频路径 ***/
String path = Environment.getExternalStorageDirectory().getPath()
+ "/Test.mp4";
// /*** 网络视频路径 ***/
// String path =
// "http://";
/*** 视频路径集合 ***/
String[] paths = new String[] { path, path, path, path };
/*** viewpager的根视图数据集合 ***/
List<ViewGroup> mViewList;
/*** 当前页面索引 ***/
int currentItem = 0;
/*** 上一个页面索引 ***/
int lastItem = 0;
/*** 页面的视频控件集合 ***/
static List<VideoView> mVideoViewList;
/*** 页面播放进度控制器集合 ***/
static List<MediaController> mMediaControllerList;
/*** 页面视频缓冲图集合 ***/
static List<View> mCacheViewList;
/*** 记录每个page页面视频播放的进度 ***/
static Map<Integer, Integer> mCurrentPositions;
/*** 记录每个page页面的视频播放状态 ***/
static Map<Integer, Boolean> mIsPlaying;
// static Map<Integer, Boolean> mIsPageFirstAvaliable;// 记录每个page页面是否第一次加载
然后在oncreate方法中初始化数据:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mViewPager = (ViewPager) this.findViewById(R.id.mViewPager);
initializeData();
Log.e(Tag, "onCreate-------->");
}
initializeData()方法如下:
private void initializeData() {
mViewList = new ArrayList<ViewGroup>();
mVideoViewList = new ArrayList<VideoView>();
mMediaControllerList = new ArrayList<MediaController>();
mCacheViewList = new ArrayList<View>();
mCurrentPositions = new HashMap<Integer, Integer>();
mIsPlaying = new HashMap<Integer, Boolean>();
// mIsPageFirstAvaliable = new HashMap<Integer, Boolean>();
for (int i = 0; i < paths.length; i++) {
ViewGroup v = (ViewGroup) View.inflate(this, R.layout.page_layout,
null);
VideoView vv = (VideoView) v.findViewById(R.id.mVideoView);
View mView = (View) v.findViewById(R.id.mView);
MediaController mpc = new MediaController(this);
vv.setVideoPath(paths[i]);// 本地视频
// vv.setVideoURI(Uri.parse(path));// 网络视频
vv.setMediaController(mpc);
setListener(vv);
mViewList.add(v);
mVideoViewList.add(vv);
mMediaControllerList.add(mpc);
mCacheViewList.add(mView);
mCurrentPositions.put(i, 0);// 每个页面的初始播放进度为0
mIsPlaying.put(i, true);// 每个页面的初始播放状态false
// mIsPageFirstAvaliable.put(i, true);// 每个页面默认第一次
}
mAdapter = new MyPagerAdapter(this, mViewList);
mViewPager.setAdapter(mAdapter);
mViewPager.setOnPageChangeListener(this);
if (mVideoViewList.get(0) != null) {
mVideoViewList.get(0).start();
mIsPlaying.put(0, true);
// mIsPageFirstAvaliable.put(0, false);
}
}
setlistener方法:
private void setListener(VideoView vv) {
vv.setOnInfoListener(this);
vv.setOnCompletionListener(this);
vv.setOnErrorListener(this);
vv.setOnPreparedListener(this);
}
viewpager的适配器MyPagerAdapter :
class MyPagerAdapter extends android.support.v4.view.PagerAdapter {
Context context;
List<ViewGroup> mViewList;
public MyPagerAdapter(Context context, List<ViewGroup> list) {
this.context = context;
this.mViewList = list;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mViewList != null ? mViewList.size() : 0;
}
@Override
public