我知道通过使用fit()和resize(),图像在下载之前会缩小尺寸。然而,当使用listView并且图像的比率变化时,我需要将imageView的layout_width和layout_height设置为wrap_content,然后使用transform()在将图像放入imageView之前确定图像的比率。
例如。
Picasso.with(mContext).load(region.getImage_url()).transform(new Transformation() {
@Override
public Bitmap transform(Bitmap source) {
int targetWidth = getContext().getSharedPreferences(Constants.PREFERENCES, Context.MODE_PRIVATE).getInt(Constants.DEVICE_WIDTH, 0);
double aspectRatio = (double) source.getHeight() / (double) source.getWidth();
int targetHeight = (int) (holder.targetWidth * 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";
}
}).into(holder.imageView);
所以我的问题是Picasso的变换方法是否也会在下载之前处理图像的缩小?如果不是,那么最好的方法是什么,而没有为listview的imageViews设置固定比率?
答案 0 :(得分:3)
我也和毕加索一起工作,我的回答是#34;不是"。图像始终先下载,然后重新调整/转换,然后显示。
下载缩小尺寸(在ListView中显示)的唯一方法是提供较小尺寸或缩略图版本的图像。如果您在自己的服务器中托管图像,则很容易实现。
答案 1 :(得分:2)
您可以使用Thumbor服务在下载之前裁剪和调整图片大小。 Square有一个很好的Java客户端 - Pollexor。 Pollexor特别Picasso RequestTransformer。也就是说,您将所有预处理提取到后端。