首先,我不确定我在编写的代码中做错了什么。
正如您在屏幕截图中看到的,有3种不同的设备。注意红框内的图像。 Xperia Z Ultra屏幕中的图像已经被裁剪,但其余的都没关系:
三星Galaxy SII(果冻豆)
Nexus 7(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;
}
}
任何人都知道这里发生了什么?
答案 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