Android - 在 recyclerView 中滑动

Android - Glide in the recyclerView

我是 android 开发新手,我有一个问题。我尝试在 RecyclerView 中加载一些图像。传入数据的类型为 byte[]。

我的第一个解决方案是将 byte[] 转换为位图,它工作正常,但位图卡在内存中,我遇到了 OutOfMemory 异常。

第二种解决方案是使用 Glide。

Glide.with(mContext)                 
                .load(field.getImage())
                .into(holder.mImageView);

但是通过这个解决方案,我在每个项目中得到了相同的图像。 我认为问题出在 Glide 的缓存中,因为传入的数组不同。我尝试用这段代码解决这个问题:

requestOptions.skipMemoryCache(true);
requestOptions.diskCacheStrategy(DiskCacheStrategy.NONE);
Glide.with(mContext)
                .applyDefaultRequestOptions(requestOptions)
                .load(field.getImage())
                .into(holder.mImageView);

 }

但这并没有帮助。正确的做法是什么?

试试这个用法 setDefaultRequestOptions(requestOptions)

Glide.with(context)
     .setDefaultRequestOptions(new RequestOptions().placeholder(R.drawable.booked_circle).error(R.drawable.booked_circle))
     .load(url)
     .into(imageView);

你可以像这样调整图片大小

 Glide.with(PhotoGalleryActivity.this)
                                    .using(new FirebaseImageLoader())
                                    .load(storageReference)
                                    .asBitmap()
                                    .into(new SimpleTarget<Bitmap>(520, 520) {
                                        @Override
                                        public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
                                            holder.img.setImageBitmap(resource);

                                        }
                                    });

要调整图像大小并添加(占位符和错误图像),请使用此代码:

    RequestOptions requestOptions = new RequestOptions();
        requestOptions.placeholder(R.drawable.app_icon);
        requestOptions.error(R.drawable.ic_image_error);
        Glide.with(context)
                .setDefaultRequestOptions(requestOptions)
                .asBitmap()
                .load(newsContentModel.getImgNewsUrl())
                .into(new SimpleTarget<Bitmap>() {
                    @Override
                    public void onResourceReady(Bitmap bitmap, Transition<? super Bitmap> transition) {
//                        requestLayout()
//                        Call this when something has changed which has
//                        invalidated the layout of this view.
                        myViewHolder.imgImage.requestLayout();
                        myViewHolder.imgImage.getLayoutParams().height = newHeight;
                        myViewHolder.imgImage.getLayoutParams().width = newWidth;

                        // Set the scale type for ImageView image scaling
                        myViewHolder.imgNewsImage.setScaleType(ImageView.ScaleType.FIT_XY);
                        myViewHolder.imgImage.setImageBitmap(bitmap);
                    }
                });