图库和全屏ImageView,将它们放在一起的问题
问题描述:
我会尽量让它尽可能清晰。图库和全屏ImageView,将它们放在一起的问题
这里我所试图做的
一个图像浏览器,其中图像将显示为大,因为他们可以在设备屏幕上。为了实现这一目标并为了更好的用户体验,我想到了一个图库。 直到那里一切都OK!
问题
的问题是,在我的适配器的功能getView,它仅使用第一个图片我在画廊的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;
}
如果你们明白为什么我会很高兴知道答案,
答
画廊强制所有的孩子有相同的尺寸。另外,每次调用getView()时都会创建一个新的View,这是一个糟糕的主意。当它不为空时,你应该使用convertView。目前Gallery中缺少一个功能,因此convertView始终为空,但为了在未来版本的Android中受益,请使用convertView。这也是一个很好的习惯,您必须在您编写的每个适配器中应用。
我在网上看到了有关convertView的视频,我会将它应用。所以如果我理解了你的信息,我的问题就不能解决我的问题了,对吗? – Spredzy 2010-06-27 15:59:23
如果您想要获得更多性能,那么您还可以使用Holder Design Pattern,并且可以设置标签并获取标签,而不是从视图层次结构中搜索标签。 – 2011-01-13 12:41:14
正如Romain所说,Gallery中的缓存/回收机制缺失,所以您将始终在适配器中获得空的convertview。 作为替代方案,您可以使用DroidUX GalleryFlow小部件,该小部件具有缓存/回收机制的工作实现。您可以使用GalleryFlow作为库存库的替代品。 – 2011-08-05 23:44:18