使用 Glide 显示多个图像
Display multiple image with Glide
我想使用 glide.I 将一张图像显示到两个不同的图像视图中,知道我可以简单地使用下面的代码来完成它。
ImageView imageView = findViewById(R.id.header_image);
Glide.with(this).load(R.drawable.header_image).into(imageView);
ImageView imageView2 = findViewById(R.id.header_image);
Glide.with(this).load(R.drawable.header_image).into(imageView2);
但它需要将同一张图像加载到内存中两次,由于内存原因我不想这样 issues.I 想加载一次图像并将其显示为两个图像 views.What 我可以吗怎么做才能实现呢?
尝试这种方式...
setImage(R.drawable.header_image,imageView ,imageView2 );
void setImage(int image, ImageView... imageView) {
for (ImageView imageView : imageView) {
if (imageView != null) {
Glide.with(this).load(image).into(imageView);
}
}
}
使用 glide 时无需担心内存问题,因为 glide 有自己的缓存系统来优化内存请阅读这篇文章 doc
Glide 提供了许多选项,允许您根据每个请求选择负载与 Glide 缓存交互的方式。
磁盘缓存策略
DiskCacheStrategy 可以与 diskCacheStrategy 方法一起应用于单个请求。可用的策略允许您阻止您的负载使用或写入磁盘缓存,或者选择仅缓存支持您的负载的未修改的原始数据,仅缓存您的负载生成的转换后的缩略图,或两者。
默认策略 AUTOMATIC 尝试对本地和远程图像使用最佳策略。当您加载远程数据(如从 URL)时,AUTOMATIC 将仅存储未修改的数据来支持您的负载,因为与调整磁盘上已有数据的大小相比,下载远程数据的成本很高。对于本地数据,AUTOMATIC 将仅存储转换后的缩略图,因为如果您需要生成第二个缩略图大小或类型,检索原始数据的成本很低。
申请DiskCacheStrategy
:
GlideApp.with(fragment)
.load(url)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imageView);
仅从缓存中加载
在某些情况下,如果图像不在缓存中,您可能希望加载失败。为此,您可以在每个请求的基础上使用 onlyRetrieveFromCache 方法:
GlideApp.with(fragment)
.load(url)
.onlyRetrieveFromCache(true)
.into(imageView);
如果在内存缓存或磁盘缓存中找到图像,将加载它。否则,如果此选项设置为true,加载将失败。
If you are using latest version of Glide
then create RequestOptions
like
private RequestOptions simpleOptions = new RequestOptions()
.centerCrop()
.placeholder(R.color.color_gray)
.error(R.color.color_gray)
.diskCacheStrategy(DiskCacheStrategy.RESOURCE);
Use RequestOptions to load image with set properties
Glide.with(context)
.load(url)
.apply(simpleOptions)
.into(imageView);
您可以使用以下代码一次加载图像并在多个图像视图中显示它。
Glide.with(this)
.asBitmap()
.load(R.drawable.header_image)
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
imageview.setImageBitmap(resource);
imageview2.setImageBitmap(resource);
}
});
或者这样……
RequestBuilder<Drawable> builder = Glide.with(this).load(drawableResId);
builder.into(imageView0)
builder.into(imageView1)
我想使用 glide.I 将一张图像显示到两个不同的图像视图中,知道我可以简单地使用下面的代码来完成它。
ImageView imageView = findViewById(R.id.header_image);
Glide.with(this).load(R.drawable.header_image).into(imageView);
ImageView imageView2 = findViewById(R.id.header_image);
Glide.with(this).load(R.drawable.header_image).into(imageView2);
但它需要将同一张图像加载到内存中两次,由于内存原因我不想这样 issues.I 想加载一次图像并将其显示为两个图像 views.What 我可以吗怎么做才能实现呢?
尝试这种方式...
setImage(R.drawable.header_image,imageView ,imageView2 );
void setImage(int image, ImageView... imageView) {
for (ImageView imageView : imageView) {
if (imageView != null) {
Glide.with(this).load(image).into(imageView);
}
}
}
使用 glide 时无需担心内存问题,因为 glide 有自己的缓存系统来优化内存请阅读这篇文章 doc
Glide 提供了许多选项,允许您根据每个请求选择负载与 Glide 缓存交互的方式。
磁盘缓存策略 DiskCacheStrategy 可以与 diskCacheStrategy 方法一起应用于单个请求。可用的策略允许您阻止您的负载使用或写入磁盘缓存,或者选择仅缓存支持您的负载的未修改的原始数据,仅缓存您的负载生成的转换后的缩略图,或两者。
默认策略 AUTOMATIC 尝试对本地和远程图像使用最佳策略。当您加载远程数据(如从 URL)时,AUTOMATIC 将仅存储未修改的数据来支持您的负载,因为与调整磁盘上已有数据的大小相比,下载远程数据的成本很高。对于本地数据,AUTOMATIC 将仅存储转换后的缩略图,因为如果您需要生成第二个缩略图大小或类型,检索原始数据的成本很低。
申请DiskCacheStrategy
:
GlideApp.with(fragment)
.load(url)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imageView);
仅从缓存中加载 在某些情况下,如果图像不在缓存中,您可能希望加载失败。为此,您可以在每个请求的基础上使用 onlyRetrieveFromCache 方法:
GlideApp.with(fragment)
.load(url)
.onlyRetrieveFromCache(true)
.into(imageView);
如果在内存缓存或磁盘缓存中找到图像,将加载它。否则,如果此选项设置为true,加载将失败。
If you are using latest version of
Glide
then createRequestOptions
like
private RequestOptions simpleOptions = new RequestOptions()
.centerCrop()
.placeholder(R.color.color_gray)
.error(R.color.color_gray)
.diskCacheStrategy(DiskCacheStrategy.RESOURCE);
Use RequestOptions to load image with set properties
Glide.with(context)
.load(url)
.apply(simpleOptions)
.into(imageView);
您可以使用以下代码一次加载图像并在多个图像视图中显示它。
Glide.with(this)
.asBitmap()
.load(R.drawable.header_image)
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
imageview.setImageBitmap(resource);
imageview2.setImageBitmap(resource);
}
});
或者这样……
RequestBuilder<Drawable> builder = Glide.with(this).load(drawableResId);
builder.into(imageView0)
builder.into(imageView1)