【发布时间】:2013-04-14 22:43:10
【问题描述】:
我有一个 4 列和 n 行的 GridView。每个单元格只是一个 ImageView。我的自定义适配器的 getView() 代码如下所示:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) { // if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
} else {
imageView = (ImageView) convertView;
}
imageView.setLayoutParams(new GridView.LayoutParams(100, 100));
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.setPadding(1, 1, 1, 1);
//imageView.setAdjustViewBounds(true);
if(imageLoader != null) {
String url = randomImage();
imageView.setContentDescription(url);
imageLoader.DisplayImage(url, imageView);
}
return imageView;
}
imageLoader 将选择一个随机 URL,并在后台获取它并相应地更新 ImageView。这工作得很好,花花公子。问题是生成的图像似乎使用的是 FIT_START 而不是 FIT_XY 的比例类型。我明确地将其设置为 FIT_XY,甚至在设置 imageView 的可绘制对象的代码中再次设置它......仍然不是 FIT_XY,我很难过。想法?
编辑删除了对 setAdjustViewBounds() 的调用。
【问题讨论】:
-
因为你用 adjustViewBounds 属性覆盖了它。你真的想要 FIT_XY吗?我问是因为这是一个极端的情况,你实际上想要不成比例地伸展。如果您希望图像适合 100x100,请改用 CENTER_CROP。
-
啊,我在测试时添加了adjustViewBounds。把它拿出来,也改成 CENTER_CROP,我得到了同样的结果。在我的情况下,FIT_XY 可以,因为我保证每个图像在缩放之前都是 300x300。那么,它仍然无法正确显示……还有其他想法吗?
-
FIT_XY 可以,是的,但是 FIT_CENTER 或 CENTER_CROP 会产生相同的结果,并且如果由于某种原因输入了错误尺寸的图像,请确保不会中断。您有发生了什么的屏幕截图吗?
-
这里是网格视图:twitpic.com/cjg0qg
-
这是它应该在每个中显示的图像:distilleryimage6.s3.amazonaws.com/…
标签: android gridview imageview