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);
}
});
我是 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);
}
});