我添加了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
答案 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