微信发送图片有个功能,就是当你拍完照片,或者保存一个张照片的时候,你点击聊天框的“+”号,微信会有个提示,你可能要发送的图片,并且附上相应的图片。要实现这个功能,分两个步骤。
1,取数据,就是从多媒体库里取出最近的图片。
2,展示,把这张图片展示出来,其实就是做一个popWindow
下图展示我做的Demo:从今日头条随便保存了一张图片
下面我们就分两步走来一步一步实现这个功能:
1,从多媒体库中取出最近要使用的图片
先封装一个图片类 ImageItem:
public class ImageItem implements Serializable {
public String name; //图片的名字
public String path; //图片的路径
public long size; //图片的大小
public int width; //图片的宽度
public int height; //图片的高度
public String mimeType; //图片的类型
public long addTime; //图片的创建时间
/** 图片的路径和创建时间相同就认为是同一张图片 */
@Override
public boolean equals(Object o) {
if (o instanceof ImageItem) {
ImageItem item = (ImageItem) o;
return this.path.equalsIgnoreCase(item.path) && this.addTime == item.addTime;
}
return super.equals(o);
}
}
这里最主要的字段是path 和addTime。
再者实现自己的LoaderCallbacks:ImageDataSource
public class ImageDataSource implements LoaderManager.LoaderCallbacks<Cursor> {
public static final int LOADER_ALL = 0; //加载所有图片
public static final int LOADER_CATEGORY = 1; //分类加载图片
private final String[] IMAGE_PROJECTION = { //查询图片需要的数据列
MediaStore.Images.Media.DISPLAY_NAME, //图片的显示名称 aaa.jpg
MediaStore.Images.Media.DATA, //图片的真实路径 /storage/emulated/0/pp/downloader/wallpaper/aaa.jpg
MediaStore.Images.Media.SIZE, //图片的大小,long型 132492
MediaStore.Images.Media.WIDTH, //图片的宽度,int型 1920
MediaStore.Images.Media.HEIGHT, //图片的高度,int型 1080
MediaStore.Images.Media.MIME_TYPE, //图片的类型 image/jpeg
MediaStore.Images.Media.DATE_ADDED //图片被添加的时间,long型 1450518608
};
private FragmentActivity activity;
/**
* 图片加载完成的回调接口
*/
private OnImagesLoadedListener loadedListener;
/**
* @param activity 用于初始化LoaderManager,需要兼容到2.3
* @param path 指定扫描的文件夹目录,可以为 null,表示扫描所有图片
* @param loadedListener 图片加载完成的监听
*/
public ImageDataSource(FragmentActivity activity, String path, OnImagesLoadedListener loadedListener) {
this.activity = act