我在我的应用中从Picasso
切换到Glide
。我有一个RecyclerView
,每个项目都是CustomView
。此CustomView
根据不同的数据源动态添加TextView
或ImageView
。
FillWidthImageView
用于显示这些图像,它会自动填充屏幕宽度。当我使用Picasso
时,效果很好。但是,当我使用Glide
加载图片时,FillWidthImageView
中显示的图片看起来像分辨率极低的马赛克,因为它会严重下采样。</ p>
如果我改为使用普通ImageView
,则加载图像的大小与占位符相同,图像看起来仍像马赛克。如果没有占位符,则屏幕上的图像看起来很小。如果我以空Activity
显示图像,它们将以完整分辨率和正确尺寸加载。
在我的ImageView
中添加CustomView
的代码(扩展LinearLayout
),在RecyclerView.onCreateViewHolder()
中调用
public void addImageView() {
ImageView imageView = new FillWidthImageView(getContext());
imageView.setPadding(0, 0, 0, 10);
imageView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
addView(imageView);
}
代码FillWidthImageView
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
Drawable drawable = getDrawable();
if (drawable != null) {
int width = MeasureSpec.getSize(widthMeasureSpec);
int diw = drawable.getIntrinsicWidth();
if (diw > 0) {
int height = width * drawable.getIntrinsicHeight() / diw;
setMeasuredDimension(width, height);
} else
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
} else
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
加载图片的代码,在RecyclerView.onBindItemViewHolder()
Glide.with(getContext()).load(url).into(imageView);
答案 0 :(得分:1)
感谢@Hitesh Kr Sahu,但我自己已经解决了这个问题。这是因为Glide没有得到我的CustomView
包装器的正确尺寸。我通过调用.override(int,int)
和.fitCenter()
来应用维度来解决这个问题。我将屏幕的宽度和高度传递给它,因此它将根据屏幕尺寸进行缩放。