摘要:前言上一篇文章已經實現了將文件中設置成動態壁紙安卓實戰項目動態桌面簡單實現需求既然文件能用于動態桌面,那么手機中的視頻也可以吧,有沒有大膽的想法上效果圖分析,類似于上面圖片的搜索效果,通過點擊,搜索出我們需要的文件圖片中用演示,此時用到
前言:上一篇文章已經實現了將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我也不怎么了解,自己多研究一下哈!
最后終極版本已提交企鵝寶求給五星好評,以后的文章就是一步步拆分這個這應用,包括服務器的搭建,數據添加!謝謝支持應用鏈接,點擊前往
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/67741.html
摘要:作為一名菜雞,時常瞻仰大佬們的開源項目是非常必要的。后臺部分在這地址動漫你的名字同款開源,原文效果圖簡詩地址一款優雅的中國風記錄,包括端和端原文相關博客如何在一天之內完成一款具備屬性的產品簡書地址一個基于豆瓣仿網易云音樂的開源項目。 作為一名菜雞Android,時常瞻仰大佬們的開源項目是非常必要的。這里我為大家收集整理了10個優秀的開源項目,方便我們日常開發中學習! 作者:Listen...
閱讀 1826·2021-11-23 09:51
閱讀 947·2021-10-08 10:05
閱讀 3431·2021-09-26 09:55
閱讀 1039·2021-09-22 15:21
閱讀 1633·2021-09-09 09:33
閱讀 1266·2019-08-30 15:56
閱讀 1285·2019-08-30 15:55
閱讀 969·2019-08-30 13:19