166

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

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

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

4

2 回答 2

501

您正在寻找:

.fit().centerCrop()

这些是什么意思:

  • fit- 等到ImageView已测量并调整图像大小以完全匹配其大小。
  • centerCrop- 缩放图像以尊重纵横比,直到它填满大小。裁剪顶部和底部或左右,使其与尺寸完全匹配。
于 2013-12-29T10:22:54.503 回答
2

在某些情况下 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);
            }
        });
于 2018-09-20T11:51:10.723 回答