我正在使用以下代码将dp转换为像素:
public static int convertDpToPixel(float dp){
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
float px = dp * ((float)metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT);
return Math.round(px);
}
我希望在宽度为160dp
的ImageView中显示图像。
我首先尝试使用android框架来显示图像,然后我也尝试了Picasso
库。
为了我的娱乐,我得到了视觉上不同的结果,我不知道如何解释它。所以我制作了一个演示应用来测试它,这是我的屏幕中的代码和结果:
int width = ImageHelper.convertDpToPixel(160);
int height = ImageHelper.convertDpToPixel(100);
ivNative = (ImageView) findViewById(R.id.iv_native);
ivPicasso = (ImageView) findViewById(R.id.iv_picasso);
ivNative.setImageResource(R.drawable.placeholder);
ivNative.getLayoutParams().width = width;
ivNative.getLayoutParams().height = height;
ivNative.requestLayout();
Picasso.with(this)
.load(R.drawable.placeholder)
.resize(width, height)
.into(ivPicasso);
结果应该不一样吗?因为显然一个比另一个宽得多。
XML代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="test.checkpicasso.MainActivity">
<ImageView android:id="@+id/iv_native"
android:layout_margin="8dp"
android:layout_width="wrap_content" android:layout_height="wrap_content" />
<ImageView android:id="@+id/iv_picasso" android:layout_below="@+id/iv_native"
android:layout_margin="8dp"
android:layout_width="wrap_content" android:layout_height="wrap_content" />
</RelativeLayout>
答案 0 :(得分:1)
默认情况下,ImageView
会尝试保留内容的宽高比(不会压缩它),而没有指定缩放类型的毕加索resize
则不会。所以你的两种方法并没有做同样的事情。
为了达到同样的效果,请将毕加索的电话改为:
Picasso.with(this)
.load(R.drawable.placeholder)
.resize(width, height)
.centerInside()
.into(ivPicasso);
或者,将ImageView
xml更改为:
<ImageView android:id="@+id/iv_native"
android:layout_margin="8dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="fitXY"/>