视频播放器(二)——播放列表
来源:互联网 发布:构建医疗数据集成平台 编辑:程序博客网 时间:2024/05/16 18:34
这一篇主要来讲视频的播放,上一篇说主页面是Indicator+ViewPager+Fragment的布局,所以,在线视频的数据是展示在OnlineFragment中,本地视频的数据是展示在LocalFragment中的。
一. 在线播放列表(OnlineFragment.java):
在OnlineFragment中,我们以GridView的形式展示网络视频数据,所以OnlineFragment中只包含一个GridView控件,看代码:
public class OnlineFragment extends Fragment { private GridView mGvOnline; private List<VideoInfo> mOnlineDatas; private OnlineGridAdapter mAdapter; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_online, null); mGvOnline = (GridView) view.findViewById(R.id.online_grid); mOnlineDatas = setData(3); mAdapter = new OnlineGridAdapter(getActivity(), mOnlineDatas); mGvOnline.setAdapter(mAdapter); return view; } /** * 以下为构造的虚假数据,如果真正项目, * 需要从服务去取视频相关数据 * @param size */ private List<VideoInfo> setData(int size){ List<VideoInfo> list = new ArrayList<VideoInfo>(); for (int i=0; i<size; i++){ String title = "新白娘子传奇(恶搞)"; String url = "http://wsqncdn.miaopai.com/stream/jCbI0KliCs0jehZm4EwZ~g__.mp4"; VideoInfo info = new VideoInfo(); info.setTitle(title); info.setUrl(url); list.add(info); } return list; }}
可以注意到,我们mOnlineDatas的数据是通过setData()方法造的一些假数据,正式项目需要从服务器拿视频的相关数据,我这里没有服务,所以就造了一些假的,但是我们的视频还是网络上的视频,这点不影响。mOnlineDatas需要设置给mAdapter,所以来看OnlineGridAdapter。
OnlineGridAdapter.java:
@Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null){ holder = new ViewHolder(); convertView = mInflater.inflate(R.layout.item_online_grid, parent, false); holder.mIv = (ImageView) convertView.findViewById(R.id.item_online_image); holder.mTvTitle = (TextView) convertView.findViewById(R.id.item_online_title); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } holder.mTvTitle.setText(mDatas.get(position).getTitle()); convertView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(mContext, PlayActivity.class); intent.putExtra(Contants.VIDEO_POSITION, position); intent.putExtra(Contants.VIDEO_FILES, (Serializable) mDatas); intent.putExtra(Contants.VIDEO_FROM, Contants.ONLINE); mContext.startActivity(intent); } }); return convertView; }
在线视频列表中,只展示了视频缩略图和标题,当然,这两个数据是在代码中写死的,正常应该是从服务器中拿。
最后,设置convertView的点击事件,当点击某一项时,跳转至PlayActivity页面播放视频,intent携带了三个参数,当前位置position,视频集合mDatas和视频来源(本地还是在线)。
效果图:
二. 本地播放列表(LocalFragment.java):
在LocalFragment中,我们是以List的形式展示本地视频数据的,所以,LocalFragment中包含一个ListView控件,代码如下:
public class LocalFragment extends Fragment { private ListView mLocalLv; private List<VideoInfo> mLocalDatas; private LocalListAdapter mAdapter; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_local, null); mLocalLv = (ListView) view.findViewById(R.id.local_list); mLocalDatas = Utils.getVideoFiles(getActivity()); mAdapter = new LocalListAdapter(getActivity(), mLocalDatas); mLocalLv.setAdapter(mAdapter); return view; }}
从上边可以看到,mLocalDatas的数据是调用Utils.getVideoFiles方法来获取SD上的视频文件的,而我们把每一个视频相关的信息封装为一个VideoInfo的实体类。然后把没LocalDatas设置给mAdapter,mAdapter负责展示在ListView中,下面来看LocalListAdapter。
LocalListAdapter.java:
只看最主要的getView方法:
@Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null){ holder = new ViewHolder(); convertView = mInflater.inflate(R.layout.item_local_list, parent, false); holder.mIvThumb = (ImageView) convertView.findViewById(R.id.item_local_thumb); holder.mTvTitle = (TextView) convertView.findViewById(R.id.item_local_title); holder.mTvDuration = (TextView) convertView.findViewById(R.id.item_local_duration); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } Bitmap bitmap = Utils.getVideoThumbnail(mDatas.get(position).getUrl()); if (bitmap != null){ holder.mIvThumb.setImageBitmap(bitmap); } holder.mTvTitle.setText(mDatas.get(position).getDisplayName()); holder.mTvDuration.setText(Utils.formatToString(mDatas.get(position).getDuration())); convertView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(mContext, PlayActivity.class); intent.putExtra(Contants.VIDEO_POSITION, position); intent.putExtra(Contants.VIDEO_FILES, (Serializable) mDatas); intent.putExtra(Contants.VIDEO_FROM, Contants.LOCAL); mContext.startActivity(intent); } }); return convertView; }
可以看到,我们展示在列表的视频信息有三个:缩略图,标题和时长。缩略图通过Utils.getVideoThumbnail()方法获取,标题和时长通过从LocalFragment传递过来的数据的集合获取。
最后,设置convertView的点击事件,当点击某一项时,跳转至PlayActivity页面播放视频,intent携带了三个参数,当前位置position,视频集合mDatas和视频来源(本地还是在线)。
效果图:
这一篇主要了解视频列表的布局和实现,下一篇最重要,开始讲如何播放视频
- 视频播放器(二)——播放列表
- 仿酷狗音乐播放器开发日志七——播放列表的实现二
- 用WPF控件MediaElement创建简易播放器(视频区域、播放控制区域、播放列表、循环播放)
- 用WPF控件MediaElement创建简易播放器(视频区域、播放控制区域、播放列表、循环播放)
- 使用Vitamio打造自己的Android万能播放器(6)——在线播放(播放列表)
- 使用Vitamio打造自己的Android万能播放器(6)——在线播放(播放列表)
- 使用Vitamio打造自己的Android万能播放器(6)——在线播放(播放列表)
- 仿酷狗音乐播放器开发日志六——播放列表的实现
- 仿酷狗音乐播放器开发日志八——播放列表的实现三
- 仿酷狗音乐播放器开发日志九——播放列表的实现四
- 仿酷狗音乐播放器开发日志十——播放列表的实现五
- 仿酷狗音乐播放器开发日志十二——播放列表的实现六
- 仿酷狗音乐播放器开发日志十二——播放列表的实现六
- 使用Vitamio打造自己的Android万能播放器(6)——在线播放(播放列表)
- HTML5+JavaScript+CSS实现音乐播放器——难点一:动态生成播放列表
- 使用Vitamio打造自己的Android万能播放器(3)——本地播放(主界面、播放列表)
- 使用Vitamio打造自己的Android万能播放器(3)——本地播放(主界面、播放列表)
- 使用Vitamio打造自己的Android万能播放器(3)——本地播放(主界面、播放列表)
- 每天学点Excel技巧-Day3
- Tarball与rpm
- Qt实现记事本的打开和保存功能(第一个实用的Qt小程序)
- Java 异常
- Nginx下的https配置
- 视频播放器(二)——播放列表
- jvm内存划分
- flow的简单使用
- C/C++中的预编译指令
- Android Robolectric 测试框架探究
- new和malloc区别
- 内联函数和宏定义的总结
- Unity连接MySQL数据库
- Java泛型深入理解