使用毕加索将图像调整为全宽和固定高度


164

我有一个垂直的LinearLayout,其中一项是ImageView使用毕加索加载的。我需要将图像的宽度增加到整个设备的宽度,并显示以固定高度(150dp)裁剪的图像的中心部分。我目前有以下代码:

Picasso.with(getActivity()) 
    .load(imageUrl) 
    .placeholder(R.drawable.placeholder) 
    .error(R.drawable.error) 
    .resize(screenWidth, imageHeight)
    .centerInside() 
    .into(imageView);

我应该输入screenWidth和哪些值imageHeight(= 150dp)?

Answers:


486

您正在寻找:

.fit().centerCrop()

这些是什么意思:

  • fit-等到ImageView测量到并调整图像大小以使其完全匹配其大小。
  • centerCrop-按照长宽比缩放图像,直到填满尺寸。裁剪顶部和底部或左侧和右侧,使其与尺寸完全匹配。

5
imageView的高度应该是多少?我不需要固定的imageView高度。它应根据图像的高度而变化。
Chetna

4
.fit().centerInside()为我工作,只是使用.centerInside()崩溃与Center inside requires calling resize with positive width and height.错误消息。
Rock Lee)

@Rock Lee,您需要调整大小:'.load(url).resize(targetWidth,targetHeight)'.........
FRK

8
.fit().centerCrop().fit().centerInside()不起作用。图片未载入中imageView。没有.fit()图像加载正常。.resize()两种情况下我都不使用。
Nishant Bhakta

如何调整大小而不从任何方向裁剪并保持
外观

1

在某些情况下,fit()是无用的。在必须等待宽度和高度测量结束之前。因此,您可以使用globallayoutlistener。例如;

imageView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
            public void onGlobalLayout() {
                Picasso.with(getActivity())
                        .load(imageUrl)
                        .placeholder(R.drawable.placeholder)
                        .error(R.drawable.error)
                        .resize(screenWidth, imageHeight)
                        .fit
                        .centerInside()
                        .into(imageView);
                imageView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            }
        });
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.