繁体   English   中英

Android gridView使用适配器和Glide加载图像

[英]Android gridView loading images using adapter and Glide

我正在使用GridView显示20张图像。 我正在使用我创建的适配器中的Glide从Web上获取并显示图像。 问题在于,即使所有图像都已下载,当我滚动网格视图时,我也会看到图像以淡淡的动画形式出现。 我不要这个。 我想将所有图像加载到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,请单击此处此处

您应该添加磁盘缓存策略以从缓存加载图像。 您可以使用SOURCE或RESULT; SOURCE仅将原始数据保存到高速缓存,而RESULT在所有转换后保存媒体项到高速缓存。 例如 :

    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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM