摘要:前言上一篇文章已经实现了将文件中设置成动态壁纸安卓实战项目动态桌面简单实现需求既然文件能用于动态桌面,那么手机中的视频也可以吧,有没有大胆的想法上效果图分析,类似于上面图片的搜索效果,通过点击,搜索出我们需要的文件图片中用演示,此时用到
前言:上一篇文章已经实现了将assets文件中设置成动态壁纸:安卓实战项目-动态桌面-简单实现
需求:既然assets文件能用于动态桌面,那么手机中的视频也可以吧,有没有大胆的想法?
上效果图:
分析:
1,类似于上面图片的搜索效果,通过点击button,搜索出我们需要的文件(图片中用list演示),此时用到了递归遍历搜索所有文件夹,终止条件就是文件。
2,对于输入框中的内容进行处理,分析输入框内容,根据内容匹配相应的文件,并展示出来;
RxJava:原理是观察者模式,举个例子,两个人a,b;a是城墙烽火台守卫,b是城池内护卫;a守卫的职责便是观望敌军有没有进犯,如果发现了,就放烽火,然后b护卫就能知道有敌军,然后调兵支援;在我们的搜索视频中也是这样,一个线程不停的搜索文件,当看到.mp4视频文件时,就发送信号,我们的list收到信号以后,就会调用list.add()添加这个视频;最后搜索完所有文件夹,线程就发信号我搜索完了,然后我们的界面的recyclerview就可以填充list中的数据啦。纯属个人理解的rxjava,有啥不对,欢迎指正哈(温柔点)!
上代码:
//添加依赖,两个,一个rxjava,一个rxandroid compile "io.reactivex.rxjava2:rxjava:2.1.0" compile "io.reactivex.rxjava2:rxandroid:2.0.1" //这个就不解释了,以前的listview升级版 compile "com.android.support:recyclerview-v7:25.3.1"
java代码:
搜索文件:这里的返回结果是:存在的,可读的,不大不小的视频文件
public ObservablesearchVideoFiles(File file) { //遍历递归文件夹 if(file.isDirectory()){ return Observable.fromArray(file.listFiles()).flatMap(new Function >() { @Override public ObservableSource apply(@NonNull File file) throws Exception { return searchVideoFiles(file); } }); }else{ //当是文件的时候就开始判断这个文件是不是存在,是不是视频文件,是不是可读,还有的话太小的太大我们都不要,规则tools类自己定义,全是boolean类型的别搞错了 return Observable.just(file).filter(new Predicate () { @Override public boolean test(@NonNull File file) throws Exception { //获取文件的类型 String mimeType = Tools.getMimeType(file.getName()); return file.exists()&&file.canRead()&&Tools.isVideo(mimeType)&&Tools.passSmallAndBigFile(file.length()); } }); } }
//rootFile 指的是根目录,也就是我们要遍历的文件夹 Observable.just(rootFile) .flatMap(new Function>() { @Override public ObservableSource apply(@NonNull File file) throws Exception { //调用上面的方法,返回我们需要的视频文件 return searchVideoFiles(file); } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer () { @Override public void onSubscribe(@NonNull Disposable d) { System.out.println("onSubscribe"); } @Override public void onNext(@NonNull File file) { String name = file.getName(); String absolutePath = file.getAbsolutePath(); String fileSize = Tools.getFileSize(file.length()); VideoBean bean = new VideoBean(name, absolutePath, fileSize); //上面找到一个我们需要的视频,就会调用onNext,到这里,video是arraylist videos.add(bean); //找到一个,recyclerview就展示一个 view.showResult(videos); } @Override public void onError(@NonNull Throwable e) { System.out.println("onError"); } @Override public void onComplete() { System.out.println("onComplete"); //当搜索完以后,我们的界面还可以Toast一下,告诉用户我们搜索完毕,增加用户体验 } });
总体思路:搜索出需要的视频文件,传到list中,view展示出来!
好了代码就不上了,根据上面思路多练练,rxjava我也不怎么了解,自己多研究一下哈!
最后终极版本已提交企鹅宝求给五星好评,以后的文章就是一步步拆分这个这应用,包括服务器的搭建,数据添加!谢谢支持应用链接,点击前往
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/67741.html
摘要:作为一名菜鸡,时常瞻仰大佬们的开源项目是非常必要的。后台部分在这地址动漫你的名字同款开源,原文效果图简诗地址一款优雅的中国风记录,包括端和端原文相关博客如何在一天之内完成一款具备属性的产品简书地址一个基于豆瓣仿网易云音乐的开源项目。 作为一名菜鸡Android,时常瞻仰大佬们的开源项目是非常必要的。这里我为大家收集整理了10个优秀的开源项目,方便我们日常开发中学习! 作者:Listen...
阅读 1802·2021-11-23 09:51
阅读 884·2021-10-08 10:05
阅读 3403·2021-09-26 09:55
阅读 1015·2021-09-22 15:21
阅读 1561·2021-09-09 09:33
阅读 1168·2019-08-30 15:56
阅读 1256·2019-08-30 15:55
阅读 938·2019-08-30 13:19