Android GridView使用适配器加载图像和Glide
问题描述:
我正在使用GridView显示20个图像。我使用Glide在我创建的适配器中获取并显示来自Web的图像。问题是,如果所有图像都下载了,当我滚动网格视图时,我看到图像出现像动画一样的淡入淡出。我不'想要这个。如果我滚动得更快,我希望在gridview中加载所有图像而不会看到它们。Android GridView使用适配器加载图像和Glide
我试过使用diskcache()和dontAnimate(),但它没有解决我的问题。我认为问题在于我显示了gridview的4个单元格。当我滚动适配器调用getView来显示其他两个单元格,并删除我滚动的2。问题在于getview每次都需要时间来显示其他两个单元格,并且我看起来像加载的效果。我希望我的场景看起来像一个网格视图,其中存在并分配了所有20个单元格。
这是我的适配器:
public class ImagesAdapter extends BaseAdapter {
private Context mContext;
private ArrayList<Picture> images;
public ImagesAdapter(Context context, int resource, ArrayList<Picture> inputImages) {
super();
this.mContext = context;
this.images = inputImages;
}
@Override
public int getCount() {
return images.size();
}
@Override
public Picture getItem(int position) {
return images.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View row = convertView;
ViewHolder holder = null;
if (row == null) {
row = LayoutInflater.from(mContext).inflate(R.layout.grid_item_layout, null);
holder = new ViewHolder();
holder.imageView = (ImageView) row.findViewById(R.id.grid_item_image);
holder.id = images.get(position).getImageId();
row.setTag(holder);
}
else {
holder = (ViewHolder) row.getTag();
holder.id = images.get(position).getImageId();
}
Picture pic = images.get(position);
Glide
.with(mContext)
.load(pic.getBigImageUrl())
.into(holder.imageView);
return row;
}
public class ViewHolder {
ImageView imageView;
public String id;
}
}
有人可以帮助我找到解决办法吗?感谢所有
答
您应该添加磁盘高速缓存策略从缓存中加载图像。 你可以使用SOURCE或RESULT; SOURCE保存原始数据以缓存并RESULT保存所有转换到缓存后的媒体项目。 例如:。
Glide
.with(mContext)
.load(pic.getBigImageUrl())
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(holder.imageView);
+0
我无法在适配器中使用.diskCacheStrategy :( – denno
滑翔将试图下载你的图像,当他们即将出现在屏幕上。所以会有延迟,直到他们出现在你的牢房里。如果你不想延迟,你必须事先下载这些图像。如果Glide提供缓存选项,您的图像将第二次立即显示,但您将永远不得不等待它们第一次下载。 –
是的,Glide正在第一次下载它们。但我的问题不是第一次。第二次,我确认图像全部下载,即使全部下载,在滚动上它们都不会立即显示。 – denno