按照日期排序相冊(cè)庫(kù) 支持自定義選中圖片,視頻數(shù)量弧轧,支持預(yù)覽雪侥,支持拍攝仿小米原生相冊(cè)

寫(xiě)在前面:

此庫(kù)源于公司項(xiàng)目需求,暫時(shí)無(wú)法提供maven地址供大家使用精绎,此處會(huì)給源碼GitHub鏈接代碼部分修改可直接運(yùn)行速缨。

庫(kù)鏈接:https://github.com/XMDstar/TimeAlbum

頁(yè)面搭建以及使用庫(kù):

頁(yè)面實(shí)現(xiàn)基于需求使用RecyclerView嵌套R(shí)ecyclerView

圖片加載使用Google所推薦的圖片加載庫(kù)Glide

線(xiàn)程間以及組件間通信使用EventBus

視頻播放使用ijkplayer

圖片+視頻預(yù)覽頁(yè)布局使用ViewPager+PhotoView ?PhotoView可以根據(jù)顯示控件的大小較為高度的還原圖片原本尺寸比例大小,用作預(yù)覽圖片還原度較高

主要類(lèi)說(shuō)明:

MaterialBean為數(shù)據(jù)實(shí)體類(lèi)代乃,TimeAlbumActivity為相冊(cè)圖片+視頻Activity旬牲,AlbumPreviewActivity為視頻或圖片預(yù)覽Activity,AlbumData和AlbumSplitData是根據(jù)需求以MaterialBean為核心添加輔助屬性適配成可用數(shù)據(jù)實(shí)體類(lèi)搁吓。需要注意的是MaterialBean中的type屬性 ?

1.photo 2.video 3.進(jìn)入相機(jī)拍攝占位 4.添加更多圖片占位(4為項(xiàng)目需求添加可不使用)

其中最為核心的類(lèi)是AlbumUtils和SplitUtils類(lèi)原茅,下面大概說(shuō)一下實(shí)現(xiàn)思路以及重要代碼展示:

AlbumUtils:相冊(cè)數(shù)據(jù)讀取以及按照時(shí)間排序并且封裝成為用于展示的AlbumData類(lèi)的工具類(lèi)。

List<AlbumData>?getFormatData(ArrayList<MaterialBean> beans,?String type)方法可以將傳入的視頻+圖片數(shù)據(jù)格式化為我們后面展示使用的 日期+該日期下的視頻與圖片集合 此方法中beans代表已經(jīng)按照時(shí)間由近到遠(yuǎn)排序的數(shù)據(jù)集合(排序使用上述getSortData()方法可得到)堕仔,type為是否添加進(jìn)入相冊(cè)拍照占位(通常將占位添加到數(shù)據(jù)首位)擂橘。

SplitUtils:拆分工具類(lèi),一類(lèi)按照時(shí)間拆分摩骨,二類(lèi)按照選擇順序拆分通贞。

基本拆分邏輯:將選擇集合拆分為視頻集合與圖片集合再根據(jù)規(guī)則將視頻集合與圖片集合進(jìn)行提取產(chǎn)生最終所需集合,按照時(shí)間拆分邏輯基本不變只是在此之前需按照時(shí)間進(jìn)行排序仿吞。(拆分為需求所用可忽略)

getSplitdata?中需要參數(shù)分別為選擇的視頻集合以及圖片集合滑频,isAddImg是判斷是否需要在拆分單元不滿(mǎn)的情況下添加一個(gè)可添加圖片占位(此處為需求添加,大多數(shù)情況不需要)唤冈。

拆分工具類(lèi)中有對(duì)選擇集合進(jìn)行拆分為視頻集合與圖片集合的方法峡迷,此處沒(méi)有在選擇的時(shí)候就將其區(qū)分主要是方便處理選中與取消選中以及置灰取消置灰的控制。

時(shí)間相冊(cè)頁(yè)面優(yōu)化防止卡頓策略:

1.使用RecyclerView.RecycledViewPool減少創(chuàng)建ViewHolder的開(kāi)銷(xiāo)?

2.嵌套內(nèi)部RecyclerView禁止滑動(dòng)并開(kāi)啟自適應(yīng)item高度,取消嵌套內(nèi)部獲得焦點(diǎn)防止第一條item圖片過(guò)多自動(dòng)上移問(wèn)題绘搞,開(kāi)啟setHasFixedSize避免重復(fù)計(jì)算item大小彤避,屏蔽RecyclerView自身默認(rèn)動(dòng)畫(huà),防止刷新閃屏問(wèn)題

3.Glide的簡(jiǎn)單使用方法如下夯辖,Glide有很好的內(nèi)存管理以及緩存機(jī)制可以很好的防止OOM琉预,對(duì)于相冊(cè)中有大量圖片視頻的用戶(hù)來(lái)說(shuō)是一個(gè)很不錯(cuò)的選擇并且它對(duì)于加載視頻第一幀相比原生MediaMetadataRetriever方式支持格式更加全面,此處設(shè)置了預(yù)加載蒿褂、加載失敗圆米、URL為null情況下的默認(rèn)圖并對(duì)加載圖片進(jìn)行了300×300的裁剪很好防止某日期下圖片巨多情況下此天滑動(dòng)卡頓的問(wèn)題

Glide.with(mContext).load(new File(bean.getPath())).error(R.drawable.image_placeholder)

.placeholder(R.drawable.image_placeholder).fallback(R.drawable.image_placeholder).override(300,300).into(holder.img);

使用說(shuō)明:

進(jìn)入相冊(cè)需要傳入1.視頻+圖片選擇上限,2.視頻選擇上限啄栓,3.是否顯示拆分彈框娄帖,根據(jù)需求默認(rèn)視頻+圖片上限50,視頻上限10相冊(cè)返回選中數(shù)據(jù)集合以及是否按照時(shí)間拆分昙楚,后續(xù)可根據(jù)返回?cái)?shù)據(jù)使用拆分工具類(lèi)進(jìn)行拆分

待優(yōu)化雞肋問(wèn)題:

點(diǎn)擊視頻圖片進(jìn)入預(yù)覽頁(yè)面當(dāng)點(diǎn)擊視頻開(kāi)始播放后滑動(dòng)預(yù)覽下張圖片或者視頻時(shí)要將播放視頻停止播放并置為初始狀態(tài)近速,解決方式如下圖,此處處理方式雖然可以實(shí)現(xiàn)需求堪旧,但是自身感覺(jué)較為不妥削葱,待改進(jìn)。

有問(wèn)題以及建議歡迎留言淳梦,蟹蟹析砸。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市谭跨,隨后出現(xiàn)的幾起案子干厚,更是在濱河造成了極大的恐慌,老刑警劉巖螃宙,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異所坯,居然都是意外死亡谆扎,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)芹助,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)堂湖,“玉大人,你說(shuō)我怎么就攤上這事状土∥薹洌” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵蒙谓,是天一觀的道長(zhǎng)斥季。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么酣倾? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任舵揭,我火速辦了婚禮,結(jié)果婚禮上躁锡,老公的妹妹穿的比我還像新娘午绳。我一直安慰自己,他們只是感情好映之,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布拦焚。 她就那樣靜靜地躺著,像睡著了一般杠输。 火紅的嫁衣襯著肌膚如雪赎败。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天抬伺,我揣著相機(jī)與錄音螟够,去河邊找鬼。 笑死峡钓,一個(gè)胖子當(dāng)著我的面吹牛妓笙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播能岩,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼寞宫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了拉鹃?” 一聲冷哼從身側(cè)響起辈赋,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎膏燕,沒(méi)想到半個(gè)月后钥屈,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡坝辫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年篷就,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片近忙。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡竭业,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出及舍,到底是詐尸還是另有隱情未辆,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布锯玛,位于F島的核電站咐柜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜炕桨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一饭尝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧献宫,春花似錦钥平、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至捷兰,卻和暖如春立叛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贡茅。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工秘蛇, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人顶考。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓赁还,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親驹沿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子艘策,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353