摘要:前言上一篇文章已經(jīng)實(shí)現(xiàn)了將文件中設(shè)置成動(dòng)態(tài)壁紙安卓實(shí)戰(zhàn)項(xiàng)目動(dòng)態(tài)桌面簡(jiǎn)單實(shí)現(xiàn)需求既然文件能用于動(dòng)態(tài)桌面,那么手機(jī)中的視頻也可以吧,有沒(méi)有大膽的想法上效果圖分析,類似于上面圖片的搜索效果,通過(guò)點(diǎn)擊,搜索出我們需要的文件圖片中用演示,此時(shí)用到
前言:上一篇文章已經(jīng)實(shí)現(xiàn)了將assets文件中設(shè)置成動(dòng)態(tài)壁紙:安卓實(shí)戰(zhàn)項(xiàng)目-動(dòng)態(tài)桌面-簡(jiǎn)單實(shí)現(xiàn)
需求:既然assets文件能用于動(dòng)態(tài)桌面,那么手機(jī)中的視頻也可以吧,有沒(méi)有大膽的想法?
上效果圖:
分析:
1,類似于上面圖片的搜索效果,通過(guò)點(diǎn)擊button,搜索出我們需要的文件(圖片中用list演示),此時(shí)用到了遞歸遍歷搜索所有文件夾,終止條件就是文件。
2,對(duì)于輸入框中的內(nèi)容進(jìn)行處理,分析輸入框內(nèi)容,根據(jù)內(nèi)容匹配相應(yīng)的文件,并展示出來(lái);
RxJava:原理是觀察者模式,舉個(gè)例子,兩個(gè)人a,b;a是城墻烽火臺(tái)守衛(wèi),b是城池內(nèi)護(hù)衛(wèi);a守衛(wèi)的職責(zé)便是觀望敵軍有沒(méi)有進(jìn)犯,如果發(fā)現(xiàn)了,就放烽火,然后b護(hù)衛(wèi)就能知道有敵軍,然后調(diào)兵支援;在我們的搜索視頻中也是這樣,一個(gè)線程不停的搜索文件,當(dāng)看到.mp4視頻文件時(shí),就發(fā)送信號(hào),我們的list收到信號(hào)以后,就會(huì)調(diào)用list.add()添加這個(gè)視頻;最后搜索完所有文件夾,線程就發(fā)信號(hào)我搜索完了,然后我們的界面的recyclerview就可以填充list中的數(shù)據(jù)啦。純屬個(gè)人理解的rxjava,有啥不對(duì),歡迎指正哈(溫柔點(diǎn))!
上代碼:
//添加依賴,兩個(gè),一個(gè)rxjava,一個(gè)rxandroid compile "io.reactivex.rxjava2:rxjava:2.1.0" compile "io.reactivex.rxjava2:rxandroid:2.0.1" //這個(gè)就不解釋了,以前的listview升級(jí)版 compile "com.android.support:recyclerview-v7:25.3.1"
java代碼:
搜索文件:這里的返回結(jié)果是:存在的,可讀的,不大不小的視頻文件
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{ //當(dāng)是文件的時(shí)候就開(kāi)始判斷這個(gè)文件是不是存在,是不是視頻文件,是不是可讀,還有的話太小的太大我們都不要,規(guī)則tools類自己定義,全是boolean類型的別搞錯(cuò)了 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 { //調(diào)用上面的方法,返回我們需要的視頻文件 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); //上面找到一個(gè)我們需要的視頻,就會(huì)調(diào)用onNext,到這里,video是arraylist videos.add(bean); //找到一個(gè),recyclerview就展示一個(gè) view.showResult(videos); } @Override public void onError(@NonNull Throwable e) { System.out.println("onError"); } @Override public void onComplete() { System.out.println("onComplete"); //當(dāng)搜索完以后,我們的界面還可以Toast一下,告訴用戶我們搜索完畢,增加用戶體驗(yàn) } });
總體思路:搜索出需要的視頻文件,傳到list中,view展示出來(lái)!
好了代碼就不上了,根據(jù)上面思路多練練,rxjava我也不怎么了解,自己多研究一下哈!
最后終極版本已提交企鵝寶求給五星好評(píng),以后的文章就是一步步拆分這個(gè)這應(yīng)用,包括服務(wù)器的搭建,數(shù)據(jù)添加!謝謝支持應(yīng)用鏈接,點(diǎn)擊前往
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/67741.html
摘要:作為一名菜雞,時(shí)常瞻仰大佬們的開(kāi)源項(xiàng)目是非常必要的。后臺(tái)部分在這地址動(dòng)漫你的名字同款開(kāi)源,原文效果圖簡(jiǎn)詩(shī)地址一款優(yōu)雅的中國(guó)風(fēng)記錄,包括端和端原文相關(guān)博客如何在一天之內(nèi)完成一款具備屬性的產(chǎn)品簡(jiǎn)書地址一個(gè)基于豆瓣仿網(wǎng)易云音樂(lè)的開(kāi)源項(xiàng)目。 作為一名菜雞Android,時(shí)常瞻仰大佬們的開(kāi)源項(xiàng)目是非常必要的。這里我為大家收集整理了10個(gè)優(yōu)秀的開(kāi)源項(xiàng)目,方便我們?nèi)粘i_(kāi)發(fā)中學(xué)習(xí)! 作者:Listen...
閱讀 1820·2021-11-23 09:51
閱讀 927·2021-10-08 10:05
閱讀 3421·2021-09-26 09:55
閱讀 1030·2021-09-22 15:21
閱讀 1626·2021-09-09 09:33
閱讀 1236·2019-08-30 15:56
閱讀 1275·2019-08-30 15:55
閱讀 958·2019-08-30 13:19