Как растянуть/масштабировать фоновые изображения в линейном макете Android?

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

Вот что у меня есть в тестовом xml на данный момент:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/title"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/background">
</LinearLayout>

Что выглядит так в превью (и в игре):

введите здесь описание изображения

Если я изменю layout_height на fill_parent, я получу повторяющийся фон:

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

Благодарность


person Android Developer    schedule 14.10.2013    source источник
comment
Кажется, проблема связана с планшетным устройством ... попробуйте использовать изображение большего размера и установите ширину и высоту на «match_parent»   -  person MikeKeepsOnShine    schedule 14.10.2013
comment
Хотелось бы, чтобы здесь было больше ответов.   -  person The Tokenizer    schedule 07.03.2014
comment
Как вы тестировали все такие экраны?   -  person Sami    schedule 29.06.2014
comment
@Sami это вариант в Android Studio при предварительном просмотре xml.   -  person Daniel Ryan    schedule 02.10.2014


Ответы (3)


Не уверен, какие доступные параметры макета фона доступны для фонового атрибута макета, но вы всегда можете просто поместить ImageView в качестве первого элемента во внешнем FrameLayout с максимальной шириной и высотой. Затем все остальное, что вы поместите в макет, будет нарисовано поверх этого изображения. И, конечно же, вы можете просто загрузить желаемый масштаб; например, fitXY, возможно, для того, чего вы пытаетесь достичь.

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<ImageView 
    android:id="@+id/background"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:contentDescription="@string/backgroundDescription"
    android:scaleType="centerCrop">
</ImageView>   
...
person Jay Snayder    schedule 14.10.2013

вот важный параметр android:scaleType с одним из возможных значений:

  • матрица
  • подходитXY
  • FitStart
  • фитцентр
  • fitEnd
  • центр
  • центрУрожай
  • центрВнутри

если вы не возражаете против обрезки изображения, когда это необходимо (экран с другим соотношением сторон, чем ваше изображение) и вы не хотите, чтобы изображение деформировалось, я бы рекомендовал centerCrop. если важно, чтобы изображение не было обрезано и вы не заметили, что оно перекошено, то fitXY подойдет.

Надеюсь, это помогло и немного прояснило ситуацию...

person Ewoks    schedule 27.08.2014

Вы можете использовать scaleType с centerCrop

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="centerCrop"
    android:src="@drawable/background" />

person Trọng Nghĩa Đỗ    schedule 27.09.2014
comment
Я думаю, что fitXY в этом случае будет лучше. - person Chaosit; 27.09.2014