【拋轉(zhuǎn)引玉】仿微信朋友圈選擇圖片及視頻的輪子

圖片選擇浸锨,相信大佬們都不屑一顧了澡为,一搜一大片驾荣,比如github上的前三甲:

1撑柔、GitHub - crazycodeboy/TakePhoto: 一款用于在Android設(shè)備上獲取照片(拍照或從相冊(cè)鲜结、文件中選擇)展运、裁剪圖片、壓縮圖片的開源工具庫

2精刷、GitHub - LuckSiege/PictureSelector: Picture Selector Library for Android or 多圖片選擇器

3拗胜、【項(xiàng)目中使用過】GitHub - jeasonlzy/ImagePicker: 完全仿微信的圖片選擇,并且提供了多種圖片加載接口怒允,選擇圖片后可以旋轉(zhuǎn)埂软,可以裁剪成矩形或圓形,可以配置各種其他的參數(shù)

視頻選擇纫事,10s視頻錄制(涉及視頻裁剪勘畔,壓縮),網(wǎng)上的資料相對(duì)較少丽惶,找到了一個(gè)相對(duì)跟微信差不多的輪子炫七,如下(star 僅有19):

GitHub - yangyong915/AlbumSelectionManager: 一個(gè)功能完善的相冊(cè)庫,包含選擇圖片钾唬、視頻万哪;拍攝圖片、視頻抡秆;裁剪壓縮奕巍、多選等內(nèi)容,參考項(xiàng)目PictureSelector儒士,整體實(shí)現(xiàn)上類似微信朋友圈相冊(cè)

在此非常感謝該作者伍绳,在此基礎(chǔ)上,將代碼整理了一下乍桂,跟大家分享冲杀,也希望大佬們能夠在此基礎(chǔ)上封裝出更牛B的輪子(__) 嘻嘻!睹酌!
項(xiàng)目目錄結(jié)構(gòu)如下:

項(xiàng)目目錄結(jié)構(gòu).png

用法如下:【效果截圖見最后】

1权谁、引入moudle :picctureAndVideoSelector

2、在需要使用的頁面中調(diào)用即可憋沿,代碼如下:


public class MainActivity extends AppCompatActivity {

private Buttonpicture;

private Buttonvideo;

private LinearLayoutresult;

@Override

    protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

picture=findViewById(R.id.picture);

video=findViewById(R.id.video);

result=findViewById(R.id.result);

picture.setOnClickListener(new View.OnClickListener() {

@Override

            public void onClick(View v) {

initPictureSelector(PictureMimeType.ofImage());

}

});

video.setOnClickListener(new View.OnClickListener() {

@Override

            public void onClick(View v) {

initPictureSelector(PictureMimeType.ofVideo());

}

});

}

public void initPictureSelector(int chooseMode) {

PictureSelector.create(this)

.openGallery(chooseMode)// 全部.PictureMimeType.ofAll()旺芽、圖片.ofImage()、視頻.ofVideo()

                .theme(R.style.picture_default_style)// 主題樣式設(shè)置 具體參考 libray中values/styles

                .maxSelectNum(9)// 最大圖片選擇數(shù)量

                .minSelectNum(1)// 最小選擇數(shù)量

                .imageSpanCount(4)// 每行顯示個(gè)數(shù)

                .selectionMode(PictureConfig.MULTIPLE)// 多選 or 單選 PictureConfig.MULTIPLE : PictureConfig.SINGLE

                .previewImage(true)// 是否可預(yù)覽圖片

                .previewVideo(true)// 是否可預(yù)覽視頻

                .enablePreviewAudio(false)// 是否預(yù)覽音頻

//                .compressGrade(Luban.THIRD_GEAR)// luban壓縮檔次,默認(rèn)3檔 Luban.FIRST_GEAR采章、Luban.CUSTOM_GEAR

                .isCamera(true)// 是否顯示拍照按鈕

                .isZoomAnim(true)// 圖片列表點(diǎn)擊 縮放效果 默認(rèn)true

                .setOutputCameraPath(Constant.IMAGE_CACHE)// 自定義拍照保存路徑

                .compress(true)// 是否壓縮

                .compressMode(PictureConfig.LUBAN_COMPRESS_MODE)//系統(tǒng)自帶 or 魯班壓縮 PictureConfig.SYSTEM_COMPRESS_MODE or LUBAN_COMPRESS_MODE

//                //.sizeMultiplier(0.5f)// glide 加載圖片大小 0~1之間 如設(shè)置 .glideOverride()無效

                .glideOverride(160,160)// glide 加載寬高运嗜,越小圖片列表越流暢,但會(huì)影響列表圖片瀏覽的清晰度

                .isGif(false)// 是否顯示gif圖片

                .openClickSound(false)// 是否開啟點(diǎn)擊聲音

//                .selectionMedia(selectList)// 是否傳入已選圖片

//                //.previewEggs(false)// 預(yù)覽圖片時(shí) 是否增強(qiáng)左右滑動(dòng)圖片體驗(yàn)(圖片滑動(dòng)一半即可看到上一張是否選中)

//                .compressGrade(Luban.CUSTOM_GEAR)

                .compressGrade(Luban.CUSTOM_GEAR)

.compressMaxKB(1024)//壓縮最大值kb compressGrade()為L(zhǎng)uban.CUSTOM_GEAR有效

                .minimumCompressSize(500)//add by tanhaiqin, 圖片大小 <= 500KB(數(shù)字可變) 不需要壓縮

//                //.compressWH() // 壓縮寬高比 compressGrade()為L(zhǎng)uban.CUSTOM_GEAR有效

//                //.videoQuality()// 視頻錄制質(zhì)量 0 or 1

                .videoSecond(5 *60)//顯示多少秒以內(nèi)的視頻

//                //.recordVideoSecond()//錄制視頻秒數(shù) 默認(rèn)60秒

                .forResult(PictureConfig.CHOOSE_REQUEST);

}

/**

* 處理 PictureSelectorActivity.java 返回的數(shù)據(jù)

* 注意 圖片壓縮 已經(jīng)是在picture lib中處理悯舟, 界面僅僅是展示獲取的LocalMedia數(shù)據(jù)担租,不做再次壓縮!

*

    * @param requestCode

    * @param resultCode

    * @param data

    */

    @Override

    protected void onActivityResult(int requestCode,int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (resultCode ==RESULT_OK) {

switch (requestCode) {

case PictureConfig.CHOOSE_REQUEST:

// 圖片選擇,共用一個(gè)數(shù)據(jù)通道:返回時(shí)圖片抵怎,可能為列表奋救,視頻只能有一個(gè)

                    List selectList = PictureSelector.obtainMultipleResult(data);

DebugUtil.i("TEST===> selectList.size = " + selectList.size());

for (int i =0; i < selectList.size(); i++) {

handleLocalMedia(selectList.get(i));

}

break;

}

}

}

private void handleLocalMedia(LocalMedia media) {

int pictureType = PictureMimeType.isPictureType(media.getPictureType());

switch (pictureType) {

case PictureConfig.TYPE_IMAGE:

DebugUtil.i("TEST===> media path = " + media.getPath()

+",  compressPath = " + media.getCompressPath()

+", height = " + media.getHeight()

+", width = " + media.getWidth());

TextView textView =new TextView(this);

textView.setText(" media path =" + media.getPath());

result.addView(textView);

break;

case PictureConfig.TYPE_VIDEO:

if (TextUtils.isEmpty(media.getPath()))return;

if (!FileUtil.fileIsExists(media.getPath())) {

DebugUtil.e("文件可能不存在了~");

return;

}

DebugUtil.e("TEST===> video path = " + media.getPath()

+",  compressPath = " + media.getCompressPath()

+", height = " + media.getHeight()

+", width = " + media.getWidth());

TextView textView1 =new TextView(this);

textView1.setText(" video path =" + media.getPath());

result.addView(textView1);

break;

}

}

}

效果圖如下:


分類選擇.jpg
拍攝10s小視頻.png
拍照.jpg
拍照完成.jpg
相冊(cè).jpg
視頻選擇.jpg

源代碼 戳一下~

歡迎大家來交流,d(???d)點(diǎn)贊!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末反惕,一起剝皮案震驚了整個(gè)濱河市尝艘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌姿染,老刑警劉巖背亥,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異悬赏,居然都是意外死亡隘梨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門舷嗡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嵌莉,你說我怎么就攤上這事进萄。” “怎么了锐峭?”我有些...
    開封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵中鼠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我沿癞,道長(zhǎng)援雇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任椎扬,我火速辦了婚禮惫搏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蚕涤。我一直安慰自己筐赔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開白布揖铜。 她就那樣靜靜地躺著茴丰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贿肩,一...
    開封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天峦椰,我揣著相機(jī)與錄音,去河邊找鬼汰规。 笑死汤功,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的控轿。 我是一名探鬼主播冤竹,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼茬射!你這毒婦竟也來了鹦蠕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤在抛,失蹤者是張志新(化名)和其女友劉穎钟病,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刚梭,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肠阱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了朴读。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屹徘。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖衅金,靈堂內(nèi)的尸體忽然破棺而出噪伊,到底是詐尸還是另有隱情,我是刑警寧澤氮唯,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布鉴吹,位于F島的核電站,受9級(jí)特大地震影響惩琉,放射性物質(zhì)發(fā)生泄漏豆励。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一瞒渠、第九天 我趴在偏房一處隱蔽的房頂上張望良蒸。 院中可真熱鬧,春花似錦伍玖、人聲如沸诚啃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽始赎。三九已至和橙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間造垛,已是汗流浹背魔招。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留五辽,地道東北人办斑。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像杆逗,于是被迫代替她去往敵國和親乡翅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,185評(píng)論 25 707
  • 1罪郊、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,982評(píng)論 3 119
  • 一蠕蚜、CSS樣式簡(jiǎn)介 行內(nèi)樣式:內(nèi)聯(lián)樣式)直接在標(biāo)簽的style屬性中書寫 頁內(nèi)樣式:在本網(wǎng)頁的style標(biāo)簽中書寫...
    DeerRun閱讀 1,706評(píng)論 0 0
  • 今天在看人家一個(gè)繼承ImagView的自定義控件,發(fā)現(xiàn)他覆寫了這下面這四個(gè)方法悔橄。就在網(wǎng)上找了下這四個(gè)方法有啥區(qū)別靶累,...
    暮云清風(fēng)閱讀 1,009評(píng)論 1 1
  • 轉(zhuǎn)自大誠系統(tǒng)的博客 http://www.lantiangerui.com/h-nd-45.html?_np=10...
    書蟲234閱讀 179評(píng)論 0 0