項(xiàng)目GitHub:https://github.com/BzCoder/SmartMediaPicker
2019.5.27 更新 版本已更新至【1.1.1】詳情參考GitHub。
多媒體選擇器 SmartMediaPicker
好久沒寫簡(jiǎn)書了,這次帶來的是自己封裝的一個(gè)多媒體選擇器。這是一款方便好用的仿微信多媒體選擇器糟袁,集合和圖片選擇,拍照,拍攝短視頻功能攒驰。主要還是站在了巨人的肩膀上,封裝了以下兩個(gè)庫(kù)故爵,修復(fù)仿微信拍照Android控件中存在的幾個(gè)BUG玻粪。也歡迎在留言中提出更多的使用配置需求。
演示
圖片選擇 |
---|
仿微信拍照錄像 |
---|
改動(dòng)
- v1.0.8
- 新增單獨(dú)調(diào)用相機(jī)诬垂,圖片選擇器功能
- SmartMediaPicker.builder()參數(shù)改為Fragment與FragmentActivity
- 修復(fù)文字提示BUG
- v1.0.7
- 添加實(shí)用工具類
- 不再直接依賴Glide
- v1.0.6
- 修復(fù)內(nèi)存泄漏問題
- v1.0.5
- 發(fā)布
使用方法
gradle添加:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.BzCoder:SmartMediaPicker:1.1.1'
}
代碼添加:
builder = SmartMediaPicker.builder(this)
//最大圖片選擇數(shù)目
.withMaxImageSelectable(5)
//最大視頻選擇數(shù)目
.withMaxVideoSelectable(1)
//圖片選擇器是否顯示數(shù)字
.withCountable(true)
//最大視頻長(zhǎng)度
.withMaxVideoLength(15 * 1000)
//最大視頻文件大小 單位MB
.withMaxVideoSize(1)
//最大圖片高度 默認(rèn)1920
.withMaxHeight(1920)
//最大圖片寬度 默認(rèn)1920
.withMaxWidth(1920)
//最大圖片大小 單位MB
.withMaxImageSize(5)
//設(shè)置圖片加載引擎
.withImageEngine(new Glide4Engine())
//彈出類別劲室,默認(rèn)彈出底部選擇欄,也可以選擇單獨(dú)跳轉(zhuǎn)
.withMediaPickerType(MediaPickerEnum.BOTH)
.build()
.show();
ImageEngine
需要自己實(shí)現(xiàn)圖片加載剥纷,圖片加載類需要實(shí)現(xiàn)ImageEngine接口痹籍,當(dāng)然也可以直接復(fù)制一下代碼:
/**
* {@link ImageEngine} implementation using Glide.
*/
public class Glide4Engine implements ImageEngine {
@Override
public void loadThumbnail(Context context, int resize, Drawable placeholder, ImageView imageView, Uri uri) {
Glide.with(context)
.asBitmap() // some .jpeg files are actually gif
.load(uri)
.apply(new RequestOptions()
.override(resize, resize)
.placeholder(placeholder)
.centerCrop())
.into(imageView);
}
@Override
public void loadGifThumbnail(Context context, int resize, Drawable placeholder, ImageView imageView,
Uri uri) {
Glide.with(context)
.asBitmap() // some .jpeg files are actually gif
.load(uri)
.apply(new RequestOptions()
.override(resize, resize)
.placeholder(placeholder)
.centerCrop())
.into(imageView);
}
@Override
public void loadImage(Context context, int resizeX, int resizeY, ImageView imageView, Uri uri) {
Glide.with(context)
.load(uri)
.apply(new RequestOptions()
.override(resizeX, resizeY)
.priority(Priority.HIGH)
.fitCenter())
.into(imageView);
}
@Override
public void loadGifImage(Context context, int resizeX, int resizeY, ImageView imageView, Uri uri) {
Glide.with(context)
.asGif()
.load(uri)
.apply(new RequestOptions()
.override(resizeX, resizeY)
.priority(Priority.HIGH)
.fitCenter())
.into(imageView);
}
@Override
public boolean supportAnimatedGif() {
return true;
}
}
實(shí)用工具類:
- SmartMediaPicker.getFileType(String url) :獲取文件類型
- SmartMediaPicker.getVideoDuration(String path):獲取視頻時(shí)長(zhǎng)
- SmartMediaPicker.getVideoPhoto(SString path):獲取視頻縮略圖
獲取選擇的資源:
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
List<String> resultData = SmartMediaPicker.getResultData(this, requestCode, resultCode, data);
if (resultData != null && resultData.size() > 0) {
tv_path.setText(Arrays.toString(resultData.toArray()));
} else {
tv_path.setText("NO DATA");
}
}
如果遇到使用問題,歡迎留言晦鞋。