【问题标题】:Very slow when bringing pictures to "Android gridview" with "Glide"使用“Glide”将图片带到“Android gridview”时非常慢
【发布时间】:2019-07-22 16:41:07
【问题描述】:

我正在 Android Studio 上制作一个图库应用。我正在使用 gridview 来显示图片。我正在使用数据库 Firebase。我使用 Glide API 来下载和显示项目中的图像。但是图片加载太晚了。我在 Google Play 上查看类似的应用程序,这些应用程序加载图片的速度非常快。下面是我的代码,你会如何提出解决方案?

public class imageAdapter extends BaseAdapter {
    private Context mContext;
    private List<String> mList;
    ImageView mImageView;
    int pos=0;

public imageAdapter(Context context,List<String> list) {
    mContext = context;
    mList = list;
}
public int getCount() {
    return mList.size();
}
public Object getItem(int position) {
    return mList.get(position);
}

public long getItemId(int position) {
    return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    pos=position;
    if (convertView == null) {
        mImageView = new ImageView(mContext);
        mImageView.setLayoutParams(new GridView.LayoutParams(350, 500));
        mImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    } else {
        mImageView = (ImageView) convertView;
    }
 Glide.with(mContext).load(mList.get(pos)).override(350,500).diskCacheStrategy(DiskCacheStrategy.ALL).placeholder(R.drawable.loading2).dontAnimate().dontTransform().into(mImageView);
    return mImageView;
}

}

【问题讨论】:

  • 你从哪里加载它们?

标签: android gridview imageview android-glide


【解决方案1】:

因为在创建视图对象时实现了改变视图

您可以在 GridViewLayoutManager 中使用 RecyclerView,它非常适合使用 diff layoutManager 在一个列表中加载多个项目

将 GridView 设置为 layoutManager

recyclerView.setLayoutManager(new GridLayoutManager(this, numberOfColumns));

实现了recyclerViewAdapter,创建了一个新的实例,并在onBindViewHolder方法中改变视图内容

 // binds the data to the TextView in each cell
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
   Glide.with(mContext).load(mList.get(pos)).override(350,500)
   .diskCacheStrategy(DiskCacheStrategy.ALL)
   .placeholder(R.drawable.loading2).dontAnimate()
   .dontTransform().into(holder.mImageView);
}

在 viewHoler 中创建或查找视图

public class ViewHolder extends RecyclerView.ViewHolder {
    ImageView mImageView;

    ViewHolder(View itemView) {
        super(itemView);
        mImageView = itemView.findViewById(R.id.image_view);
    }
}

这个article对于使用recyclerView实现GridView很有用

【讨论】:

    【解决方案2】:
      @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        // create a new view
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.popular_list_item, parent, false);
        return new MyViewHolder(view);
    }
    
    
     @Override
       public void onBindViewHolder(final MyViewHolder holder, final int position) {
       Picasso.get()
                    .load(image_path).placeholder(R.mipmap.your_placeholder)
                    .error(R.mipmap.error_icon).fit()
                    .into(holder.imageView);
    }
      public class MyViewHolder extends RecyclerView.ViewHolder {
       public TextView txtRecipeName,txtprice;
            ImageView imagview
      public MyViewHolder(View v) {
                super(v);
                imagview= (ImageView) v.findViewById(R.id.imagview);
            }
        }
    

    请实现以下代理,然后您将能够完美地使用 Picasso 或 Glide 获取图像。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      相关资源
      最近更新 更多