1.配置
1.app中的build.gradle
dependencies {
implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.2.3'
//glide版本慎用,高版本会导致闪退,具体参考github上的文件
implementation'com.github.bumptech.glide:glide:4.5.0'
}
复制代码
2.项目中的build.gradle
allprojects {
repositories {
jcenter()
maven { url 'https://jitpack.io' }
}
}
复制代码
2.权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
复制代码
3.添加GridImageAdapter类
代码内容直接在github上copy,,缺少的资源文件也直接复制github上的。
4.fragment中添加代码:
1.添加成员变量:
int aspect_ratio_x = 0;
int aspect_ratio_y = 0;
private int maxSelectNum = 6;
private List<LocalMedia> selectList = new ArrayList<>();
private GridImageAdapter adapter;
复制代码
/**
* 添加图片的点击事件 弹出选择拍照或选择照片
*/
private GridImageAdapter.onAddPicClickListener onAddPicClickListener = new GridImageAdapter
.onAddPicClickListener() {
@Override
public void onAddPicClick() {
PictureSelector.create(InstockFragment.this)
.openGallery(PictureMimeType.ofAll())
.theme(R.style.picture_default_style)
.maxSelectNum(maxSelectNum)
.minSelectNum(1)
.selectionMode(PictureConfig.MULTIPLE)
.previewImage(true)
.previewVideo(true)
.isCamera(true)
.enableCrop(false)
.compress(false)
.glideOverride(160, 160)
.previewEggs(true)
.withAspectRatio(aspect_ratio_x, aspect_ratio_y)
.isGif(false)
.openClickSound(false)
.selectionMedia(selectList)
.forResult(CHOOSE_REQUEST);
}
};
复制代码
2.在onCreateView方法中添加代码:
initChoosePhoto();
复制代码
fragment中initChoosePhoto()方法:
// 初始化图片选择工具
private void initChoosePhoto() {
//一行显示4张
FullyGridLayoutManager manager = new FullyGridLayoutManager(getContext(), 4, GridLayoutManager
.VERTICAL, false);
addPhotoRv.setLayoutManager(manager);
adapter = new GridImageAdapter(getContext(), onAddPicClickListener);
adapter.setList(selectList);
adapter.setSelectMax(maxSelectNum);
addPhotoRv.setAdapter(adapter);
adapter.setOnItemClickListener(new GridImageAdapter.OnItemClickListener() {
@Override
public void onItemClick(int position, View v) {
if (selectList.size() > 0) {
LocalMedia media = selectList.get(position);
String pictureType = media.getPictureType();
int mediaType = PictureMimeType.pictureToVideo(pictureType);
switch (mediaType) {
case 1:
// 预览图片 可自定长按保存路径
//PictureSelector.create(MainActivity.this).externalPicturePreview
// (position, "/custom_file", selectList);
PictureSelector.create(InstockFragment.this)
.externalPicturePreview(position, selectList);
break;
case 2:
// 预览视频
PictureSelector.create(InstockFragment.this).externalPictureVideo
(media.getPath());
break;
case 3:
// 预览音频
PictureSelector.create(InstockFragment.this).externalPictureAudio
(media.getPath());
break;
}
}
}
});
}
复制代码
3.重写onActivityResult方法:
@Override //接收返回的地址
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CHOOSE_REQUEST && resultCode == RESULT_OK) {
//用照片选择器后的返回
// 图片选择结果回调
selectList = PictureSelector.obtainMultipleResult(data);
adapter.setList(selectList);
adapter.notifyDataSetChanged();
}
复制代码
4.清空数据的写法(可配合dialog添加上去)
private void cleanAllData() {
//清空
selectList.clear();
adapter.notifyDataSetChanged();
}
复制代码