Растяжение изображения - PullRequest
3 голосов
/ 06 мая 2011

API 7 (2.1)

Я внедряю изображения высокого разрешения для папки drawable-hdpi моего приложения.

Внизу экрана у меня есть LinearLayout с шириной fill_parent. Внутри у меня есть 3 LinearLayouts с весом 1. Внутри них у меня есть ImageView. По сути, у меня есть 3 одинаковых по размеру пространства для 3 изображений.

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">   
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/image1"
                />
        </LinearLayout>
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:padding="0dip">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/image2"
                />
        </LinearLayout>
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/image3"
                />
        </LinearLayout>
    </LinearLayout>

Когда телефон находится в ландшафтном режиме, все выглядит нормально.

Когда телефон находится в портретном режиме, изображения уменьшаются, потому что их ширина слишком велика для их 1/3 пространства на экране. Изображения по-прежнему выглядят хорошо.

Вот моя проблема:

Мои изображения масштабируются нормально, но кажется, что LinearLayouts, обертывающие каждое изображение, не масштабируют их высоту.

В альбомном режиме верх и низ LinearLayouts, обертывающих изображения, имеют общий край. Это означает, что верхняя часть ImageView выровнена с верхней частью LinearLayout, обертывающей его, а нижняя часть ImageView выровнена с нижней частью LinearLayout, оборачивающей его. Другими словами, высота LinearLayout == высота ImageView.

В портретном режиме верх и низ LinearLayouts, обертывающих изображения, имеют пространство между ними и верхом и низом изображений, почти как при заполнении. Другими словами, высота LinearLayout> высота ImageView. Это не желательно.

Есть идеи?

Это похоже на то, что он изменяет размеры LinearLayout и ImageView, затем сжимает ImageView, чтобы соответствовать, и затем не изменяет размер LinearLayout ...

Ответы [ 3 ]

4 голосов
/ 11 мая 2011

Вы можете попробовать разработать отдельные макеты для обеих ориентаций.В папке res вашего проекта создайте подпапку с именем layout-land.Там скопируйте или создайте новый макет с тем же именем.Таким образом, вы получите полный контроль над макетом в любой ориентации.

Поскольку вы используете android:layout_weight="1", не следует ли linearLayouts равномерно разделить пространство, следовательно, появится дополнительный пробел?

РЕДАКТИРОВАТЬ: кажется, что это ImageView, который увеличивает свою высоту, когда LinerLayout имеет установленный вес.Добавьте эту строку к каждому из ваших ImageViews:

android: AdjustViewBounds = "true"

0 голосов
/ 12 мая 2011

Полагаю, лучше иметь другой макет, предназначенный для портретного режима. Не используйте один и тот же макет для портретного и ландшафтного режимов. Было бы лучше иметь разные макеты для портретного и ландшафтного режимов, чтобы контроль над дизайном был в наших руках.

0 голосов
/ 06 мая 2011

Я знаю, что это не отвечает на вопрос, который вы задали, но кажется, что было бы лучше избежать множества проблем, изменив ориентацию линейного макета на вертикальную при изменении ориентации устройства. Я полагаю, что вы можете сделать это с помощью OrientationEventListener.

...