如何在Picasso中选择resize()值的值

时间:2018-02-21 07:35:58

标签: android performance android-layout android-drawable picasso

我添加了Image View,并设置了这些值。

 <ImageView
            android:id="@ivNewsHeader
            android:layout_width="match_parent"
            android:layout_height="250dp"
            android:scaleType="centerCrop" />

我从服务器获取图像,并且它们是非常高分辨率的图像,如果我按原样添加它们,我最终得到OutOfMemoryError

所以我了解到picasso提供了解决这个问题的好方法。我使用了以下,这缩小了任何高于上述尺寸的图像。

Picasso.with(getApplicationContext()).load(imageURL).
                                    resize(180, 130).
                                    onlyScaleDown()
                                    .into(ivNews);

现在,当我选择这些resize(180, 130)时,效果非常好而且我没有得到任何OutOfMemoryError,但图像质量很差。

所以我的问题是如何选择调整大小数字,以及应该使用哪个等式来在width-height中添加正确的resize() method数字,以在不影响质量和性能的情况下获得完美的图像。

我的imageView身高为250dp,宽度为match_parent

3 个答案:

答案 0 :(得分:2)

根据设备尺寸指定比例值

设备宽度(以像素为单位)

 public static int getScreenWidth() {
        return Resources.getSystem().getDisplayMetrics().widthPixels;
    }

将DP转换为像素

public static int dpToPx(int dp)
{
    return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
}

现在使用这两个功能

Picasso.with(getApplicationContext()).load(imageURL).
                                    resize(getScreenWidth(), dpToPx(250)).
                                    onlyScaleDown()
                                    .into(ivNews);

答案 1 :(得分:1)

我认为fit()是您所需要的,因为您会在屏幕上将图片裁剪为ImageView尺寸。在这种情况下,您无需再进行任何计算。

Picasso.with(getApplicationContext())
       .load(imageURL)
       .fit()
       .centerInside()
       .into(imageView);

答案 2 :(得分:1)

尝试使用fit()测量目标ImageView的尺寸,并在内部使用resize()将图像尺寸缩小为ImageView的尺寸。

引用此article