0

首先,我不确定我写的代码哪里做错了。

正如您在屏幕截图中看到的那样,有 3 种不同的设备。注意红色框内的图像。Xperia Z Ultra 屏幕中的图像已被裁剪,但其余部分还可以:

三星 Galaxy SII(果冻豆)

三星 Galaxy SII(果冻豆)

Nexus 7(奇巧)

Nexus 7(奇巧)

Xperia Z Ultra(奇巧)

Xperia Z Ultra(奇巧)

我将图像放在 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;
    }
}

有人知道这里发生了什么吗?

4

1 回答 1

2

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

Xperia 的行高似乎要小很多。

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

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

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

和这里的官方文档:https ://developer.android.com/reference/android/view/ViewTreeObserver.OnPreDrawListener.html

于 2014-01-23T05:29:01.047 回答