6

できるだけ明確にしようと思います。

ここで私がやろうとしていること

画像がデバイス画面にできるだけ大きく表示される画像ビューア。この目的とユーザー エクスペリエンスの向上のために、ギャラリーを考えました。そこまでは大丈夫!

問題

問題は、アダプターの関数 getView で、ギャラリーにある最初の画像の Gallery.LayoutParams のみを使用することです。つまり、最初の写真が横向きで、2 番目の写真が縦向きの場合、2 番目の写真は最初の写真と同じ寸法で横向きとして表示されます。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() が呼び出されるたびに新しいビューを作成していますが、これはひどい考えです。null でない場合は convertView を使用する必要があります。現在、Gallery には不足している機能があるため、convertView は常に null ですが、Android の将来のバージョンでそれを利用するには、いずれにせよ convertView を使用してください。また、作成するすべてのアダプターに適用する必要があることもお勧めです。

于 2010-06-27T09:26:23.100 に答える