Галерея и полноэкранный ImageView, проблема в их соединении - PullRequest
6 голосов
/ 27 июня 2010

Я постараюсь быть максимально ясным.

Вот что я пытаюсь сделать

Средство просмотра изображений, где изображение будет отображаться на экране устройства настолько большим, насколько это возможно. Для этой цели и для лучшего пользовательского опыта я подумал о галерее. Пока там все ок!

Проблема

Проблема в том, что в функции getView моего Адаптера он использует только Gallery.LayoutParams первого изображения, которое у меня есть в моей галерее. Это означает, что если первое изображение - пейзаж, а второе - портрет, то второе будет отображаться как пейзаж с тем же размером, что и первый. Я сбрасываю Gallery.LayoutParams, но это не имеет значения, у него все еще есть LayoutParams первого ImageView.

Код

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;
}

Если кто-нибудь из вас поймет, почему я был бы очень рад узнать ответ,

1 Ответ

4 голосов
/ 27 июня 2010

Галерея заставляет всех детей иметь одинаковый размер. Кроме того, вы создаете новый View каждый раз, когда вызывается getView (), и это ужасная идея. Вы должны использовать convertView, когда он не нулевой. В настоящее время в приложении Gallery отсутствует функция, поэтому convertView всегда имеет значение null, но для использования его в будущей версии Android в любом случае используйте convertView. Это также хорошая практика, которую вы должны применять в каждом написанном вами адаптере.

...