Android 使用Vitamio打造自己的万能播放器(3)——本地播放(主界面、播放列表)
程序员文章站
2024-03-05 08:38:18
前言
打造一款完整可用的android播放器有许多功能和细节需要完成,也涉及到各种丰富的知识和内容,本章将结合fragment、viewpager来搭建播放器...
前言
打造一款完整可用的android播放器有许多功能和细节需要完成,也涉及到各种丰富的知识和内容,本章将结合fragment、viewpager来搭建播放器的主界面,并实现本地播放基本功能。系列文章提供截图、代码说明、源码下载,欢迎交流!
系列
1、android 使用vitamio打造自己的万能播放器(1)——准备
2、android 使用vitamio打造自己的万能播放器(2)—— 手势控制亮度、音量、缩放
正文
一、目标
1.1 使用fragment、viewpager搭建主界面
主功能区分为:本地视频、在线视频,允许滑动切换模块
1.2 用listview显示sdcard所有视频
效果截图:
(声明:图标均来自网络,仅供学习研究之用!)
二、实现代码
2.1 xml
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:gravity="center_horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <radiogroup android:gravity="center_vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <radiobutton android:id="@+id/radio_file" android:checked="true" style="@style/main_tab_bottom" android:drawabletop="@drawable/video_file" android:text="@string/title_file" /> <radiobutton android:id="@+id/radio_online" android:drawabletop="@drawable/video_online" style="@style/main_tab_bottom" android:text="@string/title_online" /> </radiogroup> <android.support.v4.view.viewpager android:background="@color/background" android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v4.view.viewpager> </linearlayout>
这是整体布局,使用radiobutton切换本地视频和在线视频功能,具体样式请下载项目。viewpager支持左右侧滑切换功能。
2.2 class
mainfragmentactivity
public class mainfragmentactivity extends fragmentactivity { private viewpager mpager; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.fragment_pager); mpager = (viewpager) findviewbyid(r.id.pager); mpager.setadapter(madapter); } private fragmentpageradapter madapter = new fragmentpageradapter(getsupportfragmentmanager()) { /** 仅执行一次 */ @override public fragment getitem(int position) { fragment result = null; switch (position) { case 1: result = new fragmentonline();//在线视频 break; case 0: default: result = new fragmentfile();//本地视频 break; } return result; } @override public int getcount() { return 2; } }; }
这里是fragment与viewpager结合使用的简单例子。
fragmentfile
public class fragmentfile extends fragmentbase implements onitemclicklistener { private fileadapter madapter; @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view v = super.oncreateview(inflater, container, savedinstancestate); madapter = new fileadapter(getactivity(), null); mlistview.setadapter(madapter); mlistview.setonitemclicklistener(this); new scanvideotask().execute(); return v; } /** 单击启动播放 */ @override public void onitemclick(adapterview<?> parent, view view, int position, long id) { final file f = madapter.getitem(position); intent intent = new intent(getactivity(), videoviewdemo.class); intent.putextra("path", f.getpath()); startactivity(intent); } /** 扫描sd卡 */ private class scanvideotask extends asynctask<void, file, void> { @override protected void doinbackground(void... params) { eachallmedias(environment.getexternalstoragedirectory()); return null; } @override protected void onprogressupdate(file... values) { madapter.add(values[0]); madapter.notifydatasetchanged(); } /** 遍历所有文件夹,查找出视频文件 */ public void eachallmedias(file f) { if (f != null && f.exists() && f.isdirectory()) { file[] files = f.listfiles(); if (files != null) { for (file file : f.listfiles()) { if (file.isdirectory()) { eachallmedias(file); } else if (file.exists() && file.canread() && fileutils.isvideooraudio(file)) { publishprogress(file); } } } } } } private class fileadapter extends arrayadapter<file> { public fileadapter(context ctx, arraylist<file> l) { super(ctx, l); } @override public view getview(int position, view convertview, viewgroup parent) { final file f = getitem(position); if (convertview == null) { final layoutinflater minflater = getactivity().getlayoutinflater(); convertview = minflater.inflate(r.layout.fragment_file_item, null); } ((textview) convertview.findviewbyid(r.id.title)).settext(f.getname()); return convertview; } } }
代码说明:
a). 这里是本章的主要功能,扫描所有视音频文件,并显示出来。
b). arrayadapter和fileutils这里不一一贴代码,主要是工具和辅助类,请下载项目查看。
c). 注意:madapter.add操作应放到主线程中,否则可能出错。
以上就是对android vitamio本地播放的资料整理,后续继续补充谢谢。
推荐阅读
-
Android 使用Vitamio打造自己的万能播放器(3)——本地播放(主界面、播放列表)
-
Android 使用Vitamio打造自己的万能播放器(10)—— 本地播放 (缩略图、视频信息、视频扫描服务)
-
Android 使用Vitamio打造自己的万能播放器(8)——细节优化
-
Android 使用Vitamio打造自己的万能播放器(9)—— 在线播放 (在线电视)
-
Android 使用Vitamio打造自己的万能播放器(2)—— 手势控制亮度、音量、缩放
-
Android 使用Vitamio打造自己的万能播放器(7)——在线播放(下载视频)
-
Android 使用Vitamio打造自己的万能播放器(6)——在线播放(播放列表)
-
Android 使用Vitamio打造自己的万能播放器(5)——在线播放(播放优酷视频)
-
Android 使用Vitamio打造自己的万能播放器(4)——本地播放(快捷搜索、数据存储)
-
Android 使用Vitamio打造自己的万能播放器(1)——准备