我正在使用Retrofit
向Imgur发送API请求,以便检索大约40个网址,然后使用RecyclerView
在Glide
中显示这些网址,如下所示:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Glide
.with(context)
.load(list.get(position).getLink()) // Gets the URL in my list
.centerCrop()
.placeholder(R.mipmap.placeholder)
.crossFade()
.into(holder.imageView);
}
请求得到快速回答,但我的大多数图片都保留为占位符,因为其中一些图像会逐一显示。
导致此图像显示延迟的原因是什么?它可能与我的互联网连接速度有关吗?
另外,当谈到“大量”图片时,我的方法是正确的吗?
请注意,大多数ImageView
都不会加载,即使是我的用户可以看到的{。}}。
答案 0 :(得分:1)
这可能取决于您的互联网连接。如果是这样,您可以使用更小的尺寸,您可以在文件名的末尾添加其中一个字母:
即这个:
http://i.imgur.com/bF8zPs4.jpg
成为这个(对于小方块):
http://i.imgur.com/bF8zPs4s.jpg
答案 1 :(得分:1)
一旦你在Glide中设置了图像的url,图像本身仍然需要下载并显示在ImageView中,这会导致延迟。如果没有加载图像,您可以检查图像URL是否在浏览器中加载图像?
使用Glide在适配器中加载图像的更好方法是使用您在适配器的构造函数中传递的RequestManager。然后Glide将订阅您的片段活动的生命周期。当碎片的活动被破坏时,这将阻止图像被下载,这在Glide必须下载大图像时特别有用。
public MyAdapter(List<Object> items, RequestManager requestManager) {
this.items = items;
this.requestManager = requestManager;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
requestManager
.load(list.get(position).getLink()) // Gets the URL in my list
.centerCrop()
.placeholder(R.mipmap.placeholder)
.crossFade()
.into(holder.imageView);
}
然后你可以用acitivty或片段调用你的适配器的构造函数:
MyAdapter myAdapter = new MyAdapter(items, Glide.with(this));
我找到this answer from TWiStErRob之后就一直在使用这种方法。
答案 2 :(得分:0)
取决于您的互联网连接速度和图像大小 如果图像的大小很大,则可能导致内存异常。
答案 3 :(得分:0)
在 Recyclerview 中, Glide 仅在可见imageViews 中加载图片。 向下滚动后,将会加载不可见的ImageView 。这是由于 RecyclerView 的 recycleler 属性造成的。
在 onBindViewHolder
中添加以下内容并查看日志,您将理解:
Log.w("Link", list.get(position).getLink());