我会尽量保持清醒。
这里我要做的是
图像查看器,其中图像将在设备屏幕上尽可能大地显示。 为了这个目的和更好的用户体验,我想到了一个画廊。 直到那里一切都好!
问题
问题是在我的适配器的getView函数中,它只使用我在Gallery中的第一张Image的Gallery.LayoutParams。这意味着如果第一张照片是风景照片而第二幅照片是纵向照片,则第二张照片将显示为风景照片,尺寸与第一幅照片相同。我重置了Gallery.LayoutParams,但没关系,它仍然有第一个ImageView的LayoutParams。
代码
public View getView(int position, View convertView, ViewGroup parent) {
ImageView im = new ImageView(mContext);
Bitmap bm = BitmapFactory.decodeByteArray(gallery.get(position).mContent, 0, gallery.get(position).mContent.length);
im.setImageBitmap(bm);
int width = 0;
int height = 0;
if (bm.getHeight() < bm.getWidth()) {
width = getWindowManager().getDefaultDisplay().getWidth();
height = bm.getHeight() * width / bm.getWidth();
}
else {
height = getWindowManager().getDefaultDisplay().getHeight();
width = bm.getWidth() * height/ bm.getHeight();
}
Gallery.LayoutParams lp = new Gallery.LayoutParams(width, height);
im.setLayoutParams(lp);
return im;
}
如果你们中的任何一个人明白为什么我真的应该知道答案,
答案 0 :(得分:4)
画廊强制所有儿童拥有相同的尺寸。此外,每次调用getView()时都会创建一个新视图,这是一个糟糕的主意。当它不为null时,你应该使用convertView。 Gallery中目前缺少一项功能,因此convertView始终为null,但要在未来的Android版本中受益,请使用convertView。这也是一个很好的做法,你必须在你写的每个适配器中应用。