我有一个图像列表,我必须从服务器下载并在Android应用程序的listView中显示它们。它们的比例各不相同,因为我想让每个ImageView与设备的宽度相匹配,我无法确定它们的高度。
我也知道我可以通过在下载之前缩小图像来提高性能,就像Picasso用fit()和resize()做的那样。
我正在将Picasso用于我的项目。问题是,我不能使用Picasso的fit()和resize()方法,这是在下载之前缩小图像尺寸的方法,如果我事先不知道imageView的高度。
所以我尝试了其他方法。我想知道转换是否也会缩小规模?
new Transformation() {
@Override
public Bitmap transform(Bitmap source) {
int targetHeight = deviceWidth;
double aspectRatio = (double) source.getHeight() / (double) source.getWidth();
int targetWidth = (int) (targetHeight / aspectRatio);
Bitmap result = Bitmap.createScaledBitmap(source, targetWidth, targetHeight, false);
if (result != source) {
// Same bitmap is returned if sizes are the same
source.recycle();
}
return result;
}
@Override
public String key() {
return "transformation" + " desiredWidth";
}
非常感谢。
答案 0 :(得分:1)
您无法在下载前“缩小图像尺寸”。
Picasso(以及其他所有内容)按原样下载原始图像,然后根据容器的尺寸进行计算以缩放图像。
如果您既不使用fit()
也不使用resize()
,Picasso将以全分辨率加载图像:即原始图像的分辨率。
答案 1 :(得分:1)
您可以使用Thumbor服务在下载之前裁剪和调整图片大小。 Square有一个很好的Java客户端 - Pollexor。 Pollexor特别Picasso RequestTransformer。也就是说,您将所有预处理提取到后端。