我有以下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());
一切正常,可能是什么问题?
答案 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;
}