6

我会尽量说清楚。

在这里我想要做什么

图像查看器,图像将在设备屏幕上尽可能大地显示。为了这个目的和更好的用户体验,我想到了一个画廊。直到那里一切正常!

问题

问题是在我的适配器的 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

1 回答 1

4

Gallery 强制所有孩子具有相同的大小。此外,每次调用 getView() 时,您都会创建一个新视图,这是一个糟糕的主意。当它不为空时,您应该使用 convertView。Gallery 中目前缺少一个功能,因此 convertView 始终为 null,但要在未来的 Android 版本中受益,请使用 convertView。这也是一个很好的做法,您必须在您编写的每个适配器中应用。

于 2010-06-27T09:26:23.100 回答