使用适配器和滑行的Android GridView加载图像



我正在使用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);

最新更新