Android - 在不同设备中裁剪图像

时间:2014-01-23 05:22:50

标签: android android-layout picasso

首先,我不确定我在编写的代码中做错了什么。

正如您在屏幕截图中看到的,有3种不同的设备。注意红框内的图像。 Xperia Z Ultra屏幕中的图像已经被裁剪,但其余的都没关系:

三星Galaxy SII(果冻豆)

Samsung Galaxy SII (Jelly Bean)

Nexus 7(KitKat)

Nexus 7 (KitKat)

Xperia Z Ultra(KitKat)

Xperia Z Ultra (KitKat)

我将图像放在ListView中,然后在适配器内充气。以下是自定义行的布局代码:

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/img_item"
        android:src="@drawable/error"
        android:adjustViewBounds="true"
        android:scaleType="centerCrop" />

</RelativeLayout>

在适配器中,我使用Picasso图像加载器来加载图像。我没有设置任何图像缩放选项。

public class ItemPhotoAdapter extends BaseAdapter {
    ...

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ...

        Picasso.with(context) //
                .load(iim.getResized()) //
                .placeholder(R.drawable.placeholder) //
                .error(R.drawable.error)
                .into(vh.item_image);

        return view;
    }
}

任何人都知道这里发生了什么?

1 个答案:

答案 0 :(得分:2)

这看起来与android:scaleType="centerCrop"以及相同尺寸的图像如何以不同的屏幕尺寸/密度显示有关。我认为这与毕加索没有任何关系。

Xperia的行高似乎相当小。

Android documentation on the different ScaleTypes可能会有所帮助。您可能需要为不同屏幕类型的行设置明确的高度(特定或最小/最大)...取决于最终产品需要的内容。

针对不同屏幕密度和大小的图像大小调整在Android中是一个令人头痛的问题:(。如果你需要一些非常具体的东西,你最终可能需要进行一些程序化调整.OnPreDrawListener回调可能会有所帮助。

您可以在此处看到使用此回调的示例:https://stackoverflow.com/a/4398578/413254

以及官方文档:https://developer.android.com/reference/android/view/ViewTreeObserver.OnPreDrawListener.html