如何像whatsapp一样将图像缓存到特定文件夹
Posted
技术标签:
【中文标题】如何像whatsapp一样将图像缓存到特定文件夹【英文标题】:How to cache images to specific folder just like whatsapp 【发布时间】:2018-04-19 04:51:05 【问题描述】:我正在使用 firebase 构建一个聊天应用程序。我正在使用 Glide 显示图像
Glide.with(getApplicationContext())
.load(imageUrl)
.crossFade()
.fitCenter()
.placeholder(R.drawable.loading)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imageView);
我想像 whatsapp 一样将图像保存到内部存储中的特定文件夹,并在保存后从那里加载图像。图像上传到 Firebase 存储,其 URL 保存在 Firebase 数据库中,我将它们加载到使用 Glide 的带有 url 的 imageView
【问题讨论】:
首先你需要下载图片并保存在你的文件夹中,然后像whatsapp一样显示在imageView中。 您想将图像存储在内部存储器或高速缓存中。因为 Whatsapp 将图像存储在内部存储中。 内部存储 看看this 【参考方案1】: private static final String IMAGE_DIRECTORY = "/yourfoldername/images";
//this method return your folder image path
public String saveImage(Bitmap myBitmap)
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
myBitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
File wallpaperDirectory = new File(
Environment.getExternalStorageDirectory() + IMAGE_DIRECTORY);
// have the object build the directory structure, if needed.
if (!wallpaperDirectory.exists())
wallpaperDirectory.mkdirs();
try
File f = new File(wallpaperDirectory, Calendar.getInstance().getTimeInMillis() + ".jpg");
f.createNewFile();
FileOutputStream fo = new FileOutputStream(f);
fo.write(bytes.toByteArray());
MediaScannerConnection.scanFile(this,
new String[]f.getPath(),
new String[]"image/jpeg", null);
fo.close();
Log.d("TAG", "File Saved::--->" + f.getAbsolutePath());
return f.getAbsolutePath();
catch (IOException e1)
e1.printStackTrace();
return "";
// glide load image
Glide.with(this)
.load(imageUrl)
.asBitmap()
.into(new SimpleTarget<Bitmap>()
@Override
public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation)
String imagepath = saveImage(resource);
// Parse the gallery image url to uri
Uri savedImageURI = Uri.parse(imagepath);
// Display the saved image to ImageView
iv_saved.setImageURI(savedImageURI);
);
【讨论】:
这段代码将在哪里加载图像没有提及任何imageView,我想在imageView中加载图像 glide onResourceReady 方法提供 Bitmap 所以,你可以使用这一行 imageview.setImageBitmap(resource); 图片是否会从内部存储中加载,我希望每次用户打开 Activity 时从内部存储中加载图像。 如果我将使用相同的代码,每次用户打开活动时都会下载并保存图像,但我希望它只发生一次,任何解决方案。我是以上是关于如何像whatsapp一样将图像缓存到特定文件夹的主要内容,如果未能解决你的问题,请参考以下文章
之后如何在 android 中加载低质量然后高质量的图像(就像 WhatsApp 个人资料图像一样)
如何像 WhatsApp 一样在 PIP 模式下播放 YouTube 视频?