【问题标题】:ImageView Scale Type incorrect inside of a GridViewGridView 内部的 ImageView Scale Type 不正确
【发布时间】: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


【解决方案1】:

所以我刚刚发现了问题。我正在使用 Romain Guy 的代码从位图创建 RoundedDrawable - 得到圆角,ala iOS,如下所示:好奇-creature.org/2012/12/11/... ...当我跳过 RoundedDrawable 转换时,它工作正常。 RoundedDrawable 代码中的某些东西是让整个事情失败的原因。我只需要找到另一种方法来绕过图像视图的角落。感谢@kcoppock,我现在正在使用 CENTER_CROP ! :)

【讨论】:

  • here 显示的 getRoundedCornerBitmap() 没有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
  • 2014-06-28
  • 1970-01-01
相关资源
最近更新 更多