Picasso .fit()。centerCrop()无法使用WRAP_CONTENT

时间:2016-09-22 00:59:44

标签: android android-imageview picasso android-image android-layoutparams

我有一个ImageView我以编程方式创建,并使用Picasso加载图像。 ImageView的高度和宽度设置为WRAP_CONTENT。图像非常大,所以我想使用Picasso的.fit().centerCrop()方法来节省内存。但是,当我添加方法时,图像不会显示,我认为必须是因为WRAP_CONTENT。这是我的代码:

ImageView iv = new ImageView(getContext());
RelativeLayout.LayoutParams centerParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
iv.setLayoutParams(centerParams);
Picasso.with(context)load(path).fit().centerCrop().into(iv); //if I remove .fit().centerCrop(), the images load just fine

我能找到的唯一信息是关于它的this issue on GitHub - 虽然问题说它在v2.4中已经关闭,但有些人评论说他们在v2.5中遇到过它。 (我也使用v2.5)

编辑:根据Angela的建议,以下是我现在使用的内容:

ImageView iv = new ImageView(getContext());
RelativeLayout.LayoutParams centerParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dpToPx(350));
centerParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
iv.setLayoutParams(centerParams);
iv.setAdjustViewBounds(true);                                    
iv.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
Picasso.with(getContext()).load(path).fit().into(iv);

图像现在显示,但它们没有正确缩放,宽高比会以某种方式改变。关于如何保留纵横比同时仍允许Picasso获得.fit()的度量的任何想法?

2 个答案:

答案 0 :(得分:6)

我也遇到了这个问题。这就是我做的......

            Picasso
                    .with(context)
                    .load(path)
                    .fit()
                    .into(iv);

在xml文件中尝试包含scaleType,adjustViewBounds和layout_gravity 例如:

<ImageView
                android:id="@+id/img_movie"
                android:layout_width="match_parent"
                android:layout_height="350dp"
                android:scaleType="fitXY"
                android:adjustViewBounds="true"
                android:layout_gravity="center"
                />

希望这有帮助! :)

答案 1 :(得分:1)

使用

Picasso.with(getContext()).load(path).fit().centerInside().into(iv);

Picasso.with(getContext()).load(path).fit().centerCrop().into(iv);