gpt4 book ai didi

android - 如何在 android 中使用通用图像加载器显示视频和图像缩略图?

转载 作者:太空狗 更新时间:2023-10-29 14:17:36 33 4
gpt4 key购买 nike

您好,我通过在 Asyntask 中实现使用光标的图像和视频文件缩略图,现在如果移动设备中有超过 500 个文件,我必须等待加载缩略图。

所以我使用 universal-image-loader-1.6.1-with-src.jar 进行异步加载,其中显示位图有问题,

如何使用通用图像加载器加载所有缩略图(图像和视频文件)?我已经提到了这个http://www.technotalkative.com/android-select-multiple-photos-from-gallery/到使用异步图像加载器但我已经有了位图 - bitList Arraylist(图像和视频的缩略图)然后我如何在 gridview 中使用该库显示这些位图?

我的代码部分是

        final String[] columns = { MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID };           // Images getting
final String orderBy = MediaStore.Images.Media.DATE_TAKEN;

imagecursor = mContext.getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null,
null, orderBy);
int image_column_index = imagecursor.getColumnIndex(MediaStore.Images.Media._ID);
this.count = imagecursor.getCount();

bitList = new ArrayList<Bitmap>();
arrPathList = new ArrayList<String>();
selectedPath = new ArrayList<String>();

for (int i = 0; i < this.count; i++) {
imagecursor.moveToPosition(i);
int id = imagecursor.getInt(image_column_index);
int dataColumnIndex = imagecursor.getColumnIndex(MediaStore.Images.Media.DATA);

bitList.add( MediaStore.Images.Thumbnails.getThumbnail(
mContext.getContentResolver(), id,
MediaStore.Images.Thumbnails.MICRO_KIND, null));

arrPathList.add(imagecursor.getString(dataColumnIndex));
}


final String[] parameters = { MediaStore.Video.Media.DATA, MediaStore.Video.Media._ID, MediaStore.Video.Media.DURATION , MediaStore.Video.Media.MIME_TYPE}; // Videos getting
final String orderBy_v = MediaStore.Video.Media._ID;

videocursor = mContext.getContentResolver().query(
MediaStore.Video.Media.EXTERNAL_CONTENT_URI, parameters, null,
null, orderBy_v);

int video_column_index = videocursor.getColumnIndex(MediaStore.Video.Media._ID);

for(int ii = 0; ii < videocursor.getCount(); ii ++){
videocursor.moveToPosition(ii);
int id_v = videocursor.getInt(video_column_index);
int datacolumn_v = videocursor.getColumnIndex(MediaStore.Video.Media.DATA);
long duration = videocursor.getInt(video_column_duration);

bitList.add(MediaStore.Video.Thumbnails.getThumbnail(mContext.getContentResolver(), id_v,
MediaStore.Video.Thumbnails.MICRO_KIND, null));

arrPathList.add(videocursor.getString(datacolumn_v));
}

提前致谢。

最佳答案

通过使用延迟加载概念解决了问题,这意味着我将显示我们通过图像光标检索并将位图存储到位列表 Arraylist 中的前 15 张图像,并且每次都通过在 View 末尾滚动来检索。

我的代码部分是:

protected Integer doInBackground(Integer... params){    // here we passes first 15 and will pass next 15  for every scrolling at the end of the view
// TODO Auto-generated method stub

if(params[0] != null)
count = params[0];

if(count == 15) // this is for will show only 15 images in first attempt in the view
j = 0; // Maintain this variable as static


for(int i = j; i < count; i ++){

imgcursor.moveToPosition(i);

String mime_Type = imgcursor.getString(imgcursor.getColumnIndex(MediaStore.MediaColumns.MIME_TYPE));
String fMime_type = mime_Type.substring(0,5);


if(fMime_type.equals("image")){

id = imgcursor.getInt(imgcursor.getColumnIndex(MediaStore.Images.Media._ID));
dataColumnIndex = imgcursor.getColumnIndex(MediaStore.Images.Media.DATA);
String date = imgcursor.getString((imgcursor.getColumnIndex(MediaStore.Images.Media.DATE_TAKEN)));
if(Constants.DEBUG)Log.e(TAG, "Date of this file" +date);
if(bitList != null)
bitList.add( MediaStore.Images.Thumbnails.getThumbnail(
getContentResolver(), id,
MediaStore.Images.Thumbnails.MICRO_KIND, null));
durationcount.add(null);
mimeType.add(fMime_type);
arrPathList.add(imgcursor.getString(dataColumnIndex));

}
else
{
id = imgcursor.getInt(imgcursor.getColumnIndex(MediaStore.Video.Media._ID));
dataColumnIndex = imgcursor.getColumnIndex(MediaStore.Video.Media.DATA);

if(Constants.DEBUG)Log.e("Duration", "Duration of video :"+imgcursor.getString(dataColumnIndex));
String path = imgcursor.getString(dataColumnIndex);
File f = new File(path);

try {
FileInputStream in = new FileInputStream(f);

mRetriever.setDataSource(in.getFD());
String durations = mRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); // getting duration of the every videos
long duration = Long.parseLong(durations);
if(Constants.DEBUG)Log.e(TAG, "Duration of file: "+duration);
String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(duration),
TimeUnit.MILLISECONDS.toMinutes(duration) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(duration)),
TimeUnit.MILLISECONDS.toSeconds(duration) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(duration)));
if(Constants.DEBUG)Log.e(TAG, "Duration of file Hms: "+hms);
durationcount.add(hms);
if(bitList != null)
bitList.add( MediaStore.Video.Thumbnails.getThumbnail(
getContentResolver(), id,
MediaStore.Video.Thumbnails.MICRO_KIND, null));
mimeType.add(fMime_type);
arrPathList.add(imgcursor.getString(dataColumnIndex));
in.close();

}
catch(Exception e){
e.printStackTrace();
}
}

}
j = count;

return null;
}

关于android - 如何在 android 中使用通用图像加载器显示视频和图像缩略图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20443108/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com