这篇博客主要写仿微信朋友圈选择图片发朋友圈。整个功能包括加载图片,显示图片、相册文件夹、预览图片,九宫格显示已经选择好的图片等等,大概会有三篇博客。
效果图
看上面的图,加载图片肯定是异步加载,耗时任务。android系统默认提供了一个Loader(Android Loader机制全面详解及源码浅析https://blog.csdn.net/axi295309066/article/details/52536960)请大家搓这篇文章,看了你会对Loader机制会有个全面的认识。在结合我这篇文章,如何去加载相册里的图片? 显示图片是RecyclerView,第一个位置显示的是一个拍照默认的图片,利用RecyclerView支持多种不同类型的布局,把第一个位置单独提取出来,去设置一个只有一张拍照图片的布局。
private LoaderManager.LoaderCallbacks mLoaderCallbacks = new LoaderManager.LoaderCallbacks() {
private final String[] IMAGE_PROJECTION = {
MediaStore.Images.Media.DATA,
MediaStore.Images.Media.DISPLAY_NAME,
MediaStore.Images.Media.DATE_ADDED,
MediaStore.Images.Media._ID,
MediaStore.Images.Media.MINI_THUMB_MAGIC,
MediaStore.Images.Media.BUCKET_DISPLAY_NAME};
//创建一个CursorLoader,去异步加载相册的图片
@NonNull
@Override
public Loader onCreateLoader(int id, @Nullable Bundle args) {
return new CursorLoader(SelectImageActivity.this,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_PROJECTION,
null, null, IMAGE_PROJECTION[2] + " DESC");
}
@Override
public void onLoadFinished(@NonNull Loader loader, Cursor data) {
if (data != null) {
ArrayList images = new ArrayList<>();
//是否显示照相图片
if (mHasCamera) {
//添加到第一个的位置(默认)
images.add(new Image());
}
ImageFolder defaultFolder = new ImageFolder();
defaultFolder.setName("全部照片");
defaultFolder.setPath("");
mImageFolders.add(defaultFolder);