2010-06-26 31 views
6

我会尽量让它尽可能清晰。图库和全屏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; 
} 

如果你们明白为什么我会很高兴知道答案,

回答

4

画廊强制所有的孩子有相同的尺寸。另外,每次调用getView()时都会创建一个新的View,这是一个糟糕的主意。当它不为空时,你应该使用convertView。目前Gallery中缺少一个功能,因此convertView始终为空,但为了在未来版本的Android中受益,请使用convertView。这也是一个很好的习惯,您必须在您编写的每个适配器中应用。

+0

我在网上看到了有关convertView的视频,我会将它应用。所以如果我理解了你的信息,我的问题就不能解决我的问题了,对吗? – Spredzy 2010-06-27 15:59:23

+0

如果您想要获得更多性能,那么您还可以使用Holder Design Pattern,并且可以设置标签并获取标签,而不是从视图层次结构中搜索标签。 – 2011-01-13 12:41:14

+0

正如Romain所说,Gallery中的缓存/回收机制缺失,所以您将始终在适配器中获得空的convertview。 作为替代方案,您可以使用DroidUX GalleryFlow小部件,该小部件具有缓存/回收机制的工作实现。您可以使用GalleryFlow作为库存库的替代品。 – 2011-08-05 23:44:18