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

时间:2017-05-31 08:46:26

标签: android image gridview android-adapter android-glide

我使用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;
    }
}

有人可以帮我找到解决方案吗?

4 个答案:

答案 0 :(得分:0)

试试这个

 Glide
 .with(mContext)
 .load(pic.getBigImageUrl())
 .placeholder(R.drawable.defaultImage)
 .into(holder.imageView);

了解更多内容滑行点击herehere

答案 1 :(得分:0)

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

    Glide
 .with(mContext)
 .load(pic.getBigImageUrl())
 .diskCacheStrategy(DiskCacheStrategy.SOURCE)
 .into(holder.imageView);

答案 2 :(得分:0)

尝试使用缓存机制,如下例所示:

Glide.with(mContext)
    .load(pic.getBigImageUrl())
    .diskCacheStrategy(DiskCacheStrategy.SOURCE)
    .dontAnimate().into(holder.imageView);

答案 3 :(得分:0)

尝试添加可解决您问题的占位符

Glide
     .with(mContext)
     .load(pic.getBigImageUrl())
     .placeholder(R.drawable.defaultImage)
     .into(holder.imageView);