Java 将图像缩略图加载到网格中的最快方法
我正在尝试显示一个包含所有用户图像的gridview 但是从android MediaStore加载图像 我必须做一个请求,然后从结果的图像循环得到每一个缩略图,这导致了一个巨大的滞后 我如何将这些调用压缩成一个请求,或者如何在这方面节省更多时间Java 将图像缩略图加载到网格中的最快方法,java,android,performance,Java,Android,Performance,我正在尝试显示一个包含所有用户图像的gridview 但是从android MediaStore加载图像 我必须做一个请求,然后从结果的图像循环得到每一个缩略图,这导致了一个巨大的滞后 我如何将这些调用压缩成一个请求,或者如何在这方面节省更多时间 String[] projection = new String[]{ MediaStore.Images.Media._ID, MediaStore.Images.Media.TITLE,
String[] projection = new String[]{
MediaStore.Images.Media._ID,
MediaStore.Images.Media.TITLE,
MediaStore.Images.Media.DATA,
MediaStore.Images.Media.MIME_TYPE,
MediaStore.Images.Media.SIZE,
MediaStore.Images.Media.DATE_TAKEN,
MediaStore.Images.Media.DATE_ADDED,
MediaStore.Images.Media.DATE_MODIFIED,
MediaStore.Images.Media.ORIENTATION
};
String sortOrder = MediaStore.Images.Media.DATE_ADDED + " DESC, " +
MediaStore.Images.Media.DATE_MODIFIED + " DESC";
ContentResolver cr = ctx.getContentResolver();
final Cursor cursorImages = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection,
null,
null,
sortOrder);
ArrayList<ImageDataHolder> images = new ArrayList<ImageDataHolder>(cursorImages.getCount());
if (cursorImages.moveToFirst()) {
final int dataColumn = cursorImages.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
final int idColumn = cursorImages.getColumnIndexOrThrow(MediaStore.Images.Media._ID);
do {
final Long imageID = cursorImages.getLong(idColumn);
final String imagePath = cursorImages.getString(dataColumn);
final int imageOrientation = cursorImages.getInt(dataColumn);
// create new cursor to get thumbnail path
final Cursor cursorThumb = MediaStore.Images.Thumbnails.queryMiniThumbnail(ctx.getContentResolver(), imageID,
MediaStore.Images.Thumbnails.MINI_KIND, null);
String thumbPath = "";
if (cursorThumb != null) {
if (cursorThumb.getCount() > 0) {
cursorThumb.moveToFirst();
thumbPath = cursorThumb.getString(cursorThumb.getColumnIndexOrThrow(MediaStore.Images.Thumbnails.DATA));
}
cursorThumb.close(); // cleanup crew, isle 7
}
// create new ImageDataHolder and add to images ArrayList
// only if we have a thumbnail to show
if (thumbPath != "")
images.add(new ImageDataHolder(imagePath, thumbPath, imageID, imageOrientation));
} while (cursorImages.moveToNext());
}
cursorImages.close();
return images;
String[]投影=新字符串[]{
MediaStore.Images.Media.\u ID,
MediaStore.Images.Media.TITLE,
MediaStore.Images.Media.DATA,
MediaStore.Images.Media.MIME_类型,
MediaStore.Images.Media.SIZE,
MediaStore.Images.Media.DATE_拍摄,
MediaStore.Images.Media.DATE_已添加,
MediaStore.Images.Media.DATE_已修改,
MediaStore.Images.Media.ORIENTATION
};
字符串sortOrder=MediaStore.Images.Media.DATE_ADDED+“DESC,”+
MediaStore.Images.Media.DATE_MODIFIED+“DESC”;
ContentResolver cr=ctx.getContentResolver();
最终光标cursorImages=cr.query(MediaStore.Images.Media.EXTERNAL\u CONTENT\u URI,
投影,
无效的
无效的
分拣机);
ArrayList images=新的ArrayList(cursorImages.getCount());
if(cursorImages.moveToFirst()){
final int dataColumn=cursorImages.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
final int ID column=cursorImages.getColumnIndexOrThrow(MediaStore.Images.Media.\u ID);
做{
final Long imageID=cursorImages.getLong(idColumn);
最终字符串imagePath=cursorImages.getString(dataColumn);
final int imageOrientation=cursorImages.getInt(数据列);
//创建新光标以获取缩略图路径
最终光标cursorThumb=MediaStore.Images.Thumbnails.queryMiniThumbnail(ctx.getContentResolver(),imageID,
MediaStore.Images.Thumbnails.MINI_KIND,null);
字符串thumbPath=“”;
if(cursorThumb!=null){
if(cursorThumb.getCount()>0){
cursorThumb.moveToFirst();
thumbPath=cursorThumb.getString(cursorThumb.getColumnIndexOrThrow(MediaStore.Images.Thumbnails.DATA));
}
cursorThumb.close();//清理队,7号岛
}
//创建新的ImageDataHolder并添加到images ArrayList
//只有当我们有一个缩略图显示
如果(拇指路径!=“”)
添加(新的ImageDataHolder(imagePath、thumbPath、imageID、imageOrientation));
}while(cursorImages.moveToNext());
}
cursorImages.close();
返回图像;