如何从外部存储加载图像,然后转换为缩略图并在图库中快速显示

问题描述

我正在开发一个相机应用程序,可以拍摄图像/照片,将它们保存在外部存储中并在图库中显示它们。我做到了,但当我走进画廊时,一切都非常缓慢。

这是从外部存储加载文件代码

//LOAD ALL FILES FROM A SPECIFIC DIRECTORY
public static void loadFiles(File dir,String filesType) {
    String ending = "end";
    switch(filesType) {
        case "temporary videos" :
            temporaryFiles.clear();
            ending = ".mp4";
            break;
        case "saved videos" :
            savedFiles.clear();
            ending = ".mp4";
            break;
        case "images" :
            images.clear();
            ending = ".jpg";
            break;
    }
    if(dir.exists()) {
        File[] files = dir.listFiles();
        for (File file : files) {
            String absolutePath = file.getAbsolutePath();
            String extension = absolutePath.substring(absolutePath.lastIndexOf("."));
            if(extension.equals(ending)) {
                loadFile(file,filesType);
            }
        }
    }
}

//LOAD SPECIFIC VIDEO
public static void loadFile(File file,String fileType) {
    Item newItem = new Item(file,Uri.fromFile(file),getDateFromFile(file),fileType);
    addItem(newItem,fileType);
}

这是我将它们转换为缩略图方法

//convert files to thumbnails and return bitmap
public static Bitmap convertFiletoThumbnailBitmap(File file,String fileType) throws IOException {
    Size mSize = new Size(10000000,10000000);
    CancellationSignal ca = new CancellationSignal();
    if(!fileType.equals("images")) {
        Bitmap bitmapThumbnail = ThumbnailUtils.createVideoThumbnail(file,mSize,ca);
        return bitmapThumbnail;
    }
    Bitmap bitmapThumbnail = ThumbnailUtils.createImageThumbnail(file,ca);
    return bitmapThumbnail;
}

这是我如何使用 recyclerview 适配器将它们下载到库中的方法 - onBindView :

@Override
public void onBindViewHolder(final ViewHolder holder,final int position) {
    try {
        holder.mImageView.setimageBitmap(Items.convertFiletoThumbnailBitmap(Items.getimages().get(position).getFile(),galleryActivity.fileTypes[2] ));
    } catch (IOException e) {
        e.printstacktrace();
    }
    
    holder.mImageView.setonClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(mContext,ImagedisplayActivity.class);
            intent.putExtra(galleryActivity.fileTypes[2],Items.getimages().get(position).getFile().getPath());
            mContext.startActivity(intent);
        }
    });
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)