我正在使用GridView显示20张图像。我正在使用Glide在我创建的适配器中获取并显示网络中的图像。问题是,如果下载了所有图像,当我滚动网格视图时,我会看到图像出现在淡淡的动画中。我不想要这个。我想将所有图像加载到GridView中,而不会看到它们出现的速度更快。
我尝试使用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;
}
}
有人可以帮助我找到解决方案吗?
尝试此
Glide
.with(mContext)
.load(pic.getBigImageUrl())
.placeholder(R.drawable.defaultImage)
.into(holder.imageView);
要扭转更多abour Glide单击此处或此处
您应该添加磁盘缓存策略以加载来自缓存的图像。您可以使用源或结果;源仅将原始数据保存到缓存,结果将在所有转换为缓存之后保存媒体项目。例如:
Glide
.with(mContext)
.load(pic.getBigImageUrl())
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(holder.imageView);
尝试使用这样的示例的缓存机制:
Glide.with(mContext)
.load(pic.getBigImageUrl())
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.dontAnimate().into(holder.imageView);
尝试添加可能解决问题的占位符
Glide
.with(mContext)
.load(pic.getBigImageUrl())
.placeholder(R.drawable.defaultImage)
.into(holder.imageView);