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

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

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

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


答案 1

您正在寻找:

.fit().centerCrop()

这些含义:

  • fit- 等到测量完毕后,调整图像大小以使其大小完全匹配。ImageView
  • centerCrop- 缩放图像,尊重宽高比,直到它填充大小。裁剪顶部和底部或左右,使其与大小完全匹配。

答案 2

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

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);
            }
        });

推荐