为 RecyclerView 中的每个项目使用 Glide 设置 ImageView 的大小,图像大小正在变化
Set ImageView`s size with Glide for each item in RecyclerView, the image size is changing
在 RecyclerView 中,我想使用原始宽高比为每个项目加载图像。服务器没有 return 图片的大小。
我的代码如下:
@Override
public void onBindViewHolder(K holder, int position) {
// ....
Glide.with(mContext)
.load(imgUrls.get(position))
.listener(new RequestListener<String, GlideDrawable>(){
// ...
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource){
int drawableWidth = resource.getIntrinsicWidth();
int drawableHeight = resource.getIntrinsicHeight();
double ratio = (drawableWidth * 1.0) / (drawableHeight * 1.0);
// depend on the ratio to set the imageView`s LayoutParams to change the imageView`s size.
.........
layoutParams.width = xx;
layoutParams.height = xx;
imageView.setLayoutParams(layoutParams);
return false;
}
})
.into(imageView);
}
但是当我滚动 RecyclerView 或刷新 RecyclerView 时,drawableWidth 的值发生了变化,因此 imageView 的大小发生了意想不到的变化。
在 RecyclerView 中设置 ImageView 大小的正确方法是什么?
您可以使用 glide it self 设置图像视图的大小。
Glide
.with(context)
.load(UsageExampleListViewAdapter.eatFoodyImages[0])
.override(600, 200) // resizes the image to these dimensions (in pixel). resize does not respect aspect ratio
.into(imageViewResize);
试试这个:
Glide.with(getContext().getApplicationContext())
.asBitmap()
.load(path)
.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.
*/
mImageView.requestLayout();
mImageView.getLayoutParams().height = newHeight;
mImageView.getLayoutParams().width = newWidth;
// Set the scale type for ImageView image scaling
mImageView.setScaleType(ImageView.ScaleType.FIT_XY);
mImageView.setImageBitmap(bitmap);
}
});
在 RecyclerView 中,我想使用原始宽高比为每个项目加载图像。服务器没有 return 图片的大小。
我的代码如下:
@Override
public void onBindViewHolder(K holder, int position) {
// ....
Glide.with(mContext)
.load(imgUrls.get(position))
.listener(new RequestListener<String, GlideDrawable>(){
// ...
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource){
int drawableWidth = resource.getIntrinsicWidth();
int drawableHeight = resource.getIntrinsicHeight();
double ratio = (drawableWidth * 1.0) / (drawableHeight * 1.0);
// depend on the ratio to set the imageView`s LayoutParams to change the imageView`s size.
.........
layoutParams.width = xx;
layoutParams.height = xx;
imageView.setLayoutParams(layoutParams);
return false;
}
})
.into(imageView);
}
但是当我滚动 RecyclerView 或刷新 RecyclerView 时,drawableWidth 的值发生了变化,因此 imageView 的大小发生了意想不到的变化。
在 RecyclerView 中设置 ImageView 大小的正确方法是什么?
您可以使用 glide it self 设置图像视图的大小。
Glide
.with(context)
.load(UsageExampleListViewAdapter.eatFoodyImages[0])
.override(600, 200) // resizes the image to these dimensions (in pixel). resize does not respect aspect ratio
.into(imageViewResize);
试试这个:
Glide.with(getContext().getApplicationContext())
.asBitmap()
.load(path)
.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.
*/
mImageView.requestLayout();
mImageView.getLayoutParams().height = newHeight;
mImageView.getLayoutParams().width = newWidth;
// Set the scale type for ImageView image scaling
mImageView.setScaleType(ImageView.ScaleType.FIT_XY);
mImageView.setImageBitmap(bitmap);
}
});