相册全白是因为在初始化的过程中缺少了一样设置
.loadImageEngine(GlideEngine.createGlideEngine())
想要微信那样的效果不要忘记加下面这句代码
.isWeChatStyle(true)//是否设置微信样式
添加PictureSelector api
api 'com.github.LuckSiege.PictureSelector:picture_library:v2.5.9'
6.0以上打开相册是需要动态申请权限的,下面两个添加一个就ok(推荐使用第一个)
//rxpermission(配套rxjava使用的)
api 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.5@aar'
//rxpermission
api 'com.github.tbruyelle:rxpermissions:0.10.2'
我把我的代码全粘来了,可以根据自己需求挑着用
Activity使用
public class FssActivity extends BaseActivity implements ViewI {
@BindView(R.id.myActionBar)
CustomActionBar myActionBar;
@BindView(R.id.rv_fss)
RecyclerView rvFss;
@BindView(R.id.tv_delete_text)
TextView tvDeleteText;
@BindView(R.id.ed_content)
EditText edContent;
private GridImageAdapter mAdapter;
private int maxSelectNum = 6;
private PresenterImpl presenter;
private String content;
String path = "";
private boolean noUp = false;
private boolean needScaleBig = true;
private boolean needScaleSmall = true;
private boolean isUpward;
private ItemTouchHelper mItemTouchHelper;
private DragListener mDragListener;
@Override
public int initLayout() {
return R.layout.activity_fss;
}
@Override
public void initView() {
ButterKnife.bind(this);
presenter = new PresenterImpl(FssActivity.this);
myActionBar.setBarCenter("发表说说", 0, null);
myActionBar.setBarRightFb(true, new View.OnClickListener() {
@Override
public void onClick(View v) {
if (noUp) {
ToastUtils.show("您选择的图片中含有不支持的图片类型,请重新选择。");
} else {
content = edContent.getText().toString();
if (content.isEmpty()) {
ToastUtils.show("发表内容不能为空");
} /*else if (path.length() == 0) {
ToastUtils.show("至少选择一张照片");
} */ else {
Map<String, Object> map = new HashMap<>();
map.put("content", content);
if (path.length() != 0) {
String s = path.substring(0, path.length() - 1);
String[] url = {
s};
if (s.contains("mp4")) {
map.put("type", 1);
} else {
map.put("type", 0);
}
map.put("urls", url);
} else {
map.put("type", 0);
}
presenter.postbody(ApiConstant.MOMENTS_URL, map, GmBean.class);
}
}
}
});
myActionBar.setBarRightQx(true, new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
@Override
public void initData() {
rvFss.setLayoutManager(new GridLayoutManager(this, 3));
rvFss.addItemDecoration(new GridSpacingItemDecoration(3, 20, false));
mAdapter = new GridImageAdapter(this);
mAdapter.setSelectMax(maxSelectNum);
rvFss.setAdapter(mAdapter);
mAdapter.setAddPicClickListener(new GridImageAdapter.onAddPicClickListener() {
@Override
public void onAddPicClick() {
//拍摄 录视频 从相册中选取pop
//cameraPhotoPop();
//从相册中选取图片
selectPicture();
}
});
mAdapter.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(View v, int position) {
List<LocalMedia> selectList = mAdapter.getData();
if (selectList.size() > 0) {
LocalMedia media = selectList.get(position);
String mimeType = media.getMimeType();
int mediaType = PictureMimeType.getMimeType(mimeType);
switch (mediaType) {
case PictureConfig.TYPE_VIDEO:
// 预览视频
PictureSelector.create(FssActivity.this)
.themeStyle(R.style.picture_WeChat_style)
.externalPictureVideo(TextUtils.isEmpty(media.getAndroidQToPath()) ? media.getPath() : media.getAndroidQToPath());
break;
case PictureConfig.TYPE_AUDIO:
/*// 预览音频
PictureSelector.create(FssActivity.this)
.externalPictureAudio(PictureMimeType.isContent(media.getPath()) ? media.getAndroidQToPath() : media.getPath());*/
break;
default:
//预览图片
PictureSelector.create(FssActivity.this)
.themeStyle(R.style.picture_WeChat_style)
.isNotPreviewDownload(true)
.loadImageEngine(GlideEngine.createGlideEngine())
.openExternalPreview(position, selectList);
break;
}
}
}
});
//拖拽删除
mAdapter.setItemLongClickListener((holder, position, v) -> {
//如果item不是最后一个,则执行拖拽
needScaleBig = true;
needScaleSmall = true;
int size = mAdapter.getData().size();
if (size != maxSelectNum) {
mItemTouchHelper.startDrag(holder);
return;
}
if (holder.getLayoutPosition() != size - 1) {
mItemTouchHelper.startDrag(holder);
}
});
mDragListener = new DragListener() {
@Override
public void deleteState(boolean isDelete) {
if (isDelete) {
tvDeleteText.setText(getString(R.string.app_let_go_drag_delete));
tvDeleteText.setCompoundDrawablesRelativeWithIntrinsicBounds(0, R.mipmap.ic_let_go_delete, 0, 0);
} else {
tvDeleteText.setText(getString(R.string.app_drag_delete));
tvDeleteText.setCompoundDrawablesRelativeWithIntrinsicBounds(0, R.mipmap.picture_icon_delete, 0, 0);
}
}
@Override
public void dragState(boolean isStart) {
int visibility = tvDeleteText.getVisibility();
if (isStart) {
if (visibility == View.GONE) {
tvDeleteText.animate().alpha(1).setDuration(300).setInterpolator