Gridview不显示所有图片,只显示一小部分

时间:2013-12-03 08:20:05

标签: android image gridview imageview adapter

我有以下GridView

public View getView(int position, View convertView, ViewGroup parent) {

    ImageView imageView;
    if (convertView == null) {
        imageView = new ImageView(context);
        imageView.setScaleType(ScaleType.CENTER_CROP);
    } else {
        imageView = (ImageView) convertView;
    }
    if (mTemplates.get(position).getResource() != 0) {
        LogService.log("", "zzzzzzzzzzzzzzzz======loaded from resource" + mTemplates.get(position).getResource() + "???????????" + mTemplates.size());
        imageView.setImageResource(mTemplates.get(position).getResource());
    } else {
        imageView.setImageDrawable(mTemplates.get(position).getDrawableThumbnail());
        // imageView.setImageResource(mTemplates.get(0).getResource());
        LogService.log("", "zzzzzzzzzzzzzzzz======loaded from drawable");
        LogService.log("", "=========SIZE: " + mTemplates.size());
    }
    return imageView;
}

现在我有一些在Drawables中没有资源的元素,而是在SD卡上的文件夹中,所以我从这些图片的源创建一个drawable,并尝试在gridview上加载该drawable:

imageView.setImageDrawable(mTemplates.get(position).getDrawableThumbnail());

但它就像gridview不能识别这些,如果它与其他图片在同一列上显示,但如果它在另一个柱子(下),它将只显示2-3mm的图片(也没有不承认它的位置就像它不是一样的。 如果我硬编码并使用资源中的第一张图片:

imageView.setImageResource(mTemplates.get(0).getResource());

一切正常,可能是什么问题?

1 个答案:

答案 0 :(得分:0)

因为pic的实际大小是小的,但是当从Resources加载imageView时它会将它扩展到它的父级大小。

通过计算所需的高度解决了这个问题,然后加载具有该高度的所有图片:

 public AdapterGridView(Context c) {
    context = c;
    DisplayMetrics metrics = new DisplayMetrics();
    ((Activity) c).getWindowManager().getDefaultDisplay().getMetrics(metrics);
    if (Constants.IS_TABLET) {
        height = metrics.widthPixels / 9 - (int) Util.pxFromDp(2, c);
    } else {
        height = metrics.widthPixels / 4 - (int) Util.pxFromDp(2, c);
    }
}

public View getView(int position, View convertView, ViewGroup parent) {

    ImageView imageView;
    if (convertView == null) {
        imageView = new ImageView(context);
    } else {
        imageView = (ImageView) convertView;
    }
    imageView.setScaleType(ScaleType.CENTER_CROP);
    imageView.setAdjustViewBounds(true);
    if (mTemplates.get(position).getResource() != 0) {
        imageView.setImageResource(mTemplates.get(position).getResource());
    } else {
        imageView.setImageDrawable(mTemplates.get(position).getDrawableThumbnail());
    }
    imageView.setLayoutParams(new LayoutParams(height, height));
    return imageView;
}